Pagini recente » Cod sursa (job #2800055) | Cod sursa (job #2740895) | Cod sursa (job #2334962) | Cod sursa (job #2400760) | Cod sursa (job #2763175)
#include <bits/stdc++.h>
#define zeros(x) x & (-x)
using namespace std;
const int MAXN = 25 * 1e4 + 65;
const int INF = 1e8;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[30][MAXN];
int query(int x, int y){
int dif = y - x + 1;
int power = 0;
for(int i = 24; i >= 0; --i){
if((1 << i) & dif){
power = i;
break;
}
}
return min(rmq[power][x] , rmq[power][y - (1 << (power - 1))]);
}
int main(){
int n, m ; fin >> n >> m;
for(int i = 1 ; i <= n; ++i){
fin >> rmq[0][i];
}
rmq[0][n + 1] = INF;
rmq[0][0] = INF;
for(int i = 1; i <= 30; ++i){
for(int j = 1; j <= n; ++j){
if(j + (1 << (i - 1)) <= n + 1)
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
}
}
for(int i = 1; i <= m; ++ i){
int x, y; fin >> x >> y;
fout << query(x , y) << '\n';
}
return 0;
}