Pagini recente » Borderou de evaluare (job #2612021) | Cod sursa (job #937327) | Cod sursa (job #1068613) | Cod sursa (job #896954) | Cod sursa (job #3030591)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int N = 1e5 + 5;
int n, m, rmq[18][N];
void init();
int query(int, int);
int main()
{
init();
for (; m; m--){
int st, dr; f >> st >> dr;
g << query(st, dr) << '\n';
}
return 0;
}
void init(){
f >> n >> m;
for (int i = 1; i <= n; i++)
f >> rmq[0][i];
for (int i = 1, p = 1; 2 * p <= n; i++, p *= 2)
for (int j = 1; j + p <= n; j++)
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + p]);
}
int query(int l, int r){
int pw = r - l + 1;
pw = 31 - __builtin_clz(pw);
return min(rmq[pw][l], rmq[pw][r - (1 << pw) + 1]);
}