Pagini recente » Cod sursa (job #2960549) | Cod sursa (job #2681634) | Cod sursa (job #58524) | Cod sursa (job #1806516) | Cod sursa (job #1408299)
#include <stdio.h>
#include <algorithm>
#define NMax 100003
#define INF (1<<30)
#define minim(a,b)((a>b)?b:a)
using namespace std;
int n,m,x,y,rmq[18][NMax],lg[NMax],diff,l,sh;
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=1; i<=n; ++i)
{
scanf("%d",&x);
rmq[0][i] = x;
}
for(int i=2; i<=n; ++i)lg[i] = lg[(i>>1)]+1;
for(int i=1; (1<<i)<=n; ++i)
{
for(int j=1 ; j + (1<<i) -1 <= n; ++j)
{
l = (1<<(i-1));
rmq[i][j] = minim(rmq[i-1][j],rmq[i-1][j+l]);
}
}
for(int i=1; i<=m; ++i)
{
scanf("%d %d",&x,&y);
diff = y-x+1;
l = lg[diff];
sh = diff - (1<<l);
printf("%d\n",minim(rmq[l][x],rmq[l][x+sh]));
}
return 0;
}