Pagini recente » Cod sursa (job #2587322) | Cod sursa (job #730600) | Cod sursa (job #266203) | Cod sursa (job #3248172) | Cod sursa (job #3162386)
#include <iostream>
#include <stdio.h>
using namespace std;
int mat[17][100010];
int main()
{
// freopen("rmq.in","r",stdin);
// freopen("rmq.out","w",stdout);
int n,m;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&mat[0][i]);
for(int p=1;(1<<p)<=n;p++)
for(int i=1;i<=n;i++){
mat[p][i]=mat[p-1][i];
int j=i+(1<<(p-1));
if(j<=n)
mat[p][i]=min(mat[p][i],mat[p-1 ][j]);
}
int E[100010];
E[1]=0;
for(int i=2;i<=n;i++)
E[i]=E[i/2]+1;
for(int i=1;i<=m;i++){
int st,dr;
scanf("%d%d",&st,&dr);
int putere=E[dr-st+1];
int len=(1<<putere);
int minim=min(mat[putere][st],mat[putere][dr-len+1]);
printf("%d\n",minim);
}
return 0;
}