Pagini recente » Cod sursa (job #2318130) | Cod sursa (job #2767851) | Cod sursa (job #2147758) | Cod sursa (job #2403302) | Cod sursa (job #1046009)
#include <iostream>
#include <cstdio>
#include <algorithm>
#define NMAX 100001
#define LMAX 18
FILE *f,*g;
using namespace std;
long int RMQ[LMAX][NMAX],N,M,LG[NMAX],A[NMAX];
int main()
{
f = fopen("rmq.in","r");
g = fopen("rmq.out","w");
long int i,j,l;
fscanf(f,"%ld %ld\n",&N,&M);
for(i=1 ; i<=N ; i++)
{
fscanf(f,"%ld\n",&A[i]);
}
LG[1] = 0;
for(i=2 ; i<=N ; i++)
{
LG[i] = LG[i/2] + 1;
}
for(i=1 ; i<=N ; i++)
{
RMQ[0][i] = A[i];
}
for(i=1 ; (1<<i)<=N ; i++)
{
for(j=1 ; j<=N-(1<<i)+1 ; j++)
{
l = 1<<(i-1);
RMQ[i][j] = min( RMQ[i-1][j] , RMQ[i-1][j+l]);
}
}
for (i=1 ; i<=M ; i++)
{
long int x,y,dif,sh;
fscanf(f,"%ld %ld\n",&x,&y);
dif = y - x + 1;
l = LG[dif];
sh = dif - (1<<l);
fprintf(g,"%ld\n",min( RMQ[l][x] , RMQ[l][x+sh] ));
}
fclose(f);
fclose(g);
return 0;
}