Pagini recente » Cod sursa (job #53224) | Cod sursa (job #597712) | Cod sursa (job #229340) | Cod sursa (job #2035154) | Cod sursa (job #2858176)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int MAXN = 1e6 + 1;
const int MAXLOG = 17;
int n, v[MAXN], lg[MAXN];
int M[MAXN][MAXLOG];
void RMQ() {
for(int i = 1; i <= n; i++)
M[i][0] = v[i];
for(int k = 1; k <= lg[n]; k++)
for(int i = 1; i + (1 << k) - 1 <= n; i++)
M[i][k] = min(M[i][k-1], M[i + (1 << (k - 1))][k - 1]);
}
int query(int L, int R) {
int k = lg[R - L + 1];
return min(M[L][k], M[R - (1 << k) + 1][k]);
}
int main() {
int q, L, R;
fin >> n >> q;
for(int i = 1; i <= n; i++) {
fin >> v[i];
if(i > 1)
lg[i] = lg[i / 2] + 1;
}
RMQ();
while(q--) {
fin >> L >> R;
fout << query(L, R) << "\n";
}
return 0;
}