Pagini recente » Cod sursa (job #2155146) | Cod sursa (job #2332628) | Cod sursa (job #1528583) | Cod sursa (job #87350) | Cod sursa (job #1483579)
#include <cstdio>
#include<algorithm>
using namespace std;
int N,Q,k,X,Y;
int D[20][100010],v[100010];
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&N,&Q);
for(int i=1;i<=N;i++)
scanf("%d",&D[0][i]);
for(int i=1;(1<<i)<N;i++){
for(int j=1;j<=N;j++){
if(j+(1<<(i-1))>N)
D[i][j]=D[i-1][j];
else{
D[i][j]=min(D[i-1][j],D[i-1][j+(1<<(i-1))]);
}
}
}
for(int i=2;i<=N;i++){
v[i]=1+v[i/2];
}
for(int i=1;i<=Q;i++){
scanf("%d %d",&X,&Y);
k=v[Y-X+1];
printf("%d\n",min(D[k][X],D[k][Y-(1<<k)+1]));
}
return 0;
}