Pagini recente » Cod sursa (job #2929117) | Cod sursa (job #1499654) | Cod sursa (job #2787463) | Cod sursa (job #1673727) | Cod sursa (job #996702)
Cod sursa(job #996702)
#include <cstdio>
using namespace std;
const int MAX_N=100100;
const int LG=20;
int rmq[LG][MAX_N];
int v[MAX_N];
int log[MAX_N];
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",&v[i]);
rmq[0][i]=i;
}
for(int k=1;(1<<k)<=n;k++) {
for(int i=1;(i+(1<<k)-1)<=n;i++) {
if(v[rmq[k-1][i]]<v[rmq[k-1][i+(1<<(k-1))]]) {
rmq[k][i]=rmq[k-1][i];
}
else {
rmq[k][i]=rmq[k-1][i+(1<<(k-1))];
}
}
}
log[1]=1;
for(int i=2;i<=n;i++)
log[i]=log[i/2]+1;
for(int i=1;i<=m;i++) {
int x,y;
scanf("%d%d",&x,&y);
int k=log[y-x+1]-1;
if(v[rmq[k][x]]<v[rmq[k][y-(1<<k)+1]]) {
printf("%d\n",v[rmq[k][x]]);
}
else {
printf("%d\n",v[rmq[k][y-(1<<k)+1]]);
}
}
return 0;
}