Pagini recente » Cod sursa (job #1309516) | Cod sursa (job #2568201) | Cod sursa (job #1875371) | Cod sursa (job #652867) | Cod sursa (job #2616126)
#include <stdio.h>
#include <iostream>
int n, t, rmq[20][100005], log[100005], x, y;
int main(){
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int i, j, l, e;
scanf("%d%d", &n, &t);
for(i=1; i<=n; i++)
scanf("%d", &rmq[0][i]);
for(i=2; i<=n; i++)
log[i]=1+log[i/2];
for(i=1; i<=log[n]; i++)
for(j=1; j<=n; j++){
rmq[i][j]=rmq[i-1][j];
e=i-1;
if(j+(1<<e)<= n && rmq[i-1][j+(1<<e)]<rmq[i][j])
rmq[i][j]=rmq[i-1][j+(1<<e)];
}
while(t--){
scanf("%d%d", &x, &y);
l=y-x+1;
e=log[l];
printf("%d\n", std::min(rmq[log[l]][x], rmq[log[l]][y-(1<<e)+1]));
}
return 0;
}