Pagini recente » Cod sursa (job #81752) | Cod sursa (job #208856) | Cod sursa (job #2368071) | Cod sursa (job #2594743) | Cod sursa (job #1383249)
#include<cstdio>
#include<algorithm>
using namespace std;
int rmq[1000001][20];
int doi[21];
int lg[1000001];
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n,m,i,j,k;
scanf("%d%d",&n,&m);
lg[1]=0;
for(i=2; i<=n; ++i){
lg[i]=lg[i/2] + 1;
}
doi[0]=1;
j = lg[n] + 1;
for(i=1; i<=j; ++i){
doi[i]=doi[i-1]*2;
}
for(i=0; i<n; ++i){
scanf("%d",&rmq[i][0]);
}
for(j=1; doi[j] <= n; ++j){
for(i=0; i + doi[j] - 1 < n; ++i){
rmq[i][j] = min(rmq[i][j-1] ,rmq[i + doi[j-1]][j-1]);
}
}
for(;m;--m){
scanf("%d%d",&i,&j);
i--; j--;
k = lg[j-i + 1];
printf("%d\n",min(rmq[i][k],rmq[j - doi[k] + 1][k]));
}
return 0;
}