Pagini recente » Cod sursa (job #2140420) | Cod sursa (job #1109061) | Cod sursa (job #41091) | Cod sursa (job #2277888) | Cod sursa (job #1324049)
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define NMAX_C 100010
#define NMAX_L 30
#define minim(a,b) ((a<b)?(a):(b))
int N;
int ST[NMAX_C][NMAX_L];
void ConstructST()
{
int iMax;
for(iMax=0; (1<<iMax) <= N;iMax++);
iMax--;
for(int i=1; i <= iMax; i++)
for(int j=1;(1<<i) + j - 1 <= N;j++)
ST[i][j] = minim(ST[i-1][j],ST[i-1][(1<<(i-1)) + j]);
}
int QueryST(int a , int b)
{
int lg = (int) log2(double(b - a + 1));
return minim(ST[lg][a], ST[lg][b - (1<<lg) +1]);
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int M;
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++)
scanf("%d",&ST[0][i]);
ConstructST();
while(M--)
{
int x,y;
scanf("%d%d",&x,&y);
if(x>y)
swap(x,y);
printf("%d\n",QueryST(x,y));
}
return 0;
}