Pagini recente » Cod sursa (job #1692656) | Cod sursa (job #1893890) | Cod sursa (job #1564874) | Cod sursa (job #1109233) | Cod sursa (job #2142095)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const int LG = 17;
int rmq[LG][N];
int lg2[N];
int query(int l, int r){
int bucket = lg2[r - l + 1];
return min(rmq[bucket][l], rmq[bucket][r - (1 << bucket) + 1]);
}
int main(){
freopen("home.in", "r", stdin);
freopen("home.out", "w", stdout);
int n, q;
scanf("%d %d", &n, &q);
for(int i = 1;i <= n;i++){
scanf("%d", &rmq[0][i]);
}
for(int i = 2;i <= n;i++){
lg2[i] = lg2[i / 2] + 1;
}
for(int i = 1;i <= LG;i++){
for(int j = 1;j + (1 << i) - 1 <= n;j++){
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
}
}
while(q--){
int l, r;
scanf("%d %d", &l, &r);
printf("%d\n", query(l, r));
}
return 0;
}