Pagini recente » Cod sursa (job #1214634) | Cod sursa (job #647234) | Cod sursa (job #2271530) | Cod sursa (job #307381) | Cod sursa (job #2607338)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define N 100005
#define L 17
int v[N], n;
int M[L][N], L2[N];
void precalc() {
M[0][1] = v[1]; L2[1] = 0;
for(int i = 2; i <= n; ++i) {
M[0][i] = v[i];
L2[i] = 1+L2[i/2];
}
for(int j = 1; j <= n; ++j) {
for(int i = 1; (1 << i) <= j; ++i) {
int j_prim = j - (1 << (i-1));
M[i][j] = min(M[i-1][j_prim], M[i-1][j]);
}
}
}
int rmq(int x, int y) {
const int l = L2[y-x+1];
return min(M[l][x+(1<<l)-1], M[l][y]);
}
int main() {
int m, x, y;
fin >> n >> m;
for(int i = 1; i <= n; ++i)
fin >> v[i];
precalc(); do {
fin >> x >> y;
fout << rmq(x, y) << '\n';
} while(--m);
return 0;
}