Pagini recente » Cod sursa (job #548214) | Cod sursa (job #860586) | Cod sursa (job #413607) | Cod sursa (job #1304213) | Cod sursa (job #1969440)
#include <stdio.h>
using namespace std;
FILE *f1 = fopen("rmq.in","r");
FILE *f2 = fopen("rmq.out","w");
const int buff_size = 10000;
char buff[buff_size];
int buff_poz;
void citeste(int &x)
{
x=0;
while(buff[buff_poz]<'0' || buff[buff_poz]>'9')
if(++buff_poz == buff_size)
{
fread(buff,1,buff_size,f1);
buff_poz = 0;
}
while(buff[buff_poz] >= '0' && buff[buff_poz] <='9')
{
x = x*10 + buff[buff_poz] - '0';
if(++buff_poz == buff_size)
{
fread(buff,1,buff_size,f1);
buff_poz = 0;
}
}
}
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
const int N = 100005;
const int LOG = 17;
int n,q,i,j,x,y;
int rmq[LOG][N],log[N];
void build()
{
for(i=2;i<=n;i++)
log[i] = log[i/2] + 1;
for(i=1;(1<<i) <= n;i++)
for(j=1;j<=n;j++)
rmq[i][j] = min(rmq[i-1][j] , rmq[i-1][j + (1<<(i-1))]);
}
int query()
{
int lg,dif;
lg = log[y-x+1];
dif = y - (1<<lg) + 1;
return min(rmq[lg][x] , rmq[lg][dif]);
}
int main()
{
citeste(n);
citeste(q);
for(i=1;i<=n;i++)
citeste(rmq[0][i]);
build();
for(i=0;(1<<i) <= n;i++)
{
for(j=1;j<=n;j++)
printf("%d ",rmq[i][j]);
printf("\n");
}
while(q--)
{
citeste(x);
citeste(y);
//printf("%d %d\n",x,y);
fprintf(f2,"%d\n",query());
}
return 0;
}