Pagini recente » Cod sursa (job #2428871) | Cod sursa (job #2236783) | Cod sursa (job #2868430) | Cod sursa (job #2246182) | Cod sursa (job #1609692)
#include <cstdio>
#define NMax 100005
#define LgMax 18
#define Min(a,b) (a<b) ? a : b
using namespace std;
int N, M, v[NMax], i, j, log2[LgMax], sol, lg, x, y, RMQ[LgMax][NMax];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&N,&M);
for(i=1;i<=N;i++)
{
scanf("%d ",&v[i]);
if(i>1)
log2[i]=log2[i/2]+1;
RMQ[i][0]=i;
}
for(j=1; (1<<j)<=N; j++)
for(i=1; i+(1<<j)-1<=N; i++)
if(v[RMQ[i][j-1]]<=v[RMQ[i+(1<<(j-1))][j-1]])
RMQ[i][j]=RMQ[i][j-1];
else RMQ[i][j]=RMQ[i+(1<<(j-1))][j-1];
for(i=1;i<=M;i++)
{
scanf("%d %d",&x,&y);
lg=log2[y-x+1];
sol=Min(v[RMQ[x][lg]],v[RMQ[y-(1<<lg)+1][lg]]);
printf("%d\n",sol);
}
return 0;
}