Pagini recente » Cod sursa (job #2299116) | Cod sursa (job #619592) | Cod sursa (job #2798695) | Cod sursa (job #2367812) | Cod sursa (job #2629629)
#include <bits/stdc++.h>
using namespace std;
#define K 18
#define N 100005
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, a[K][N], logTable[N];
void precompute() {
for(int i = 1; (1 << i) <= n; ++i)
for(int j = 0; j + (1 << i) <= n; ++j)
a[i][j] = min(a[i-1][j],
a[i-1][j + (1 << (i-1))]);
logTable[2] = 1;
for(int i = 3; i < N; ++i)
logTable[i] = logTable[i/2] + 1;
}
int rmq(int x, int y) {
int& i = logTable[y-x+1];
return min(a[i][x], a[i][y - (1<<i) + 1]);
}
int main() {
int m, x, y;
fin >> n >> m;
for(int i = 0; i < n; ++i)
fin >> a[0][i];
precompute();
do {
fin >> x >> y;
fout << rmq(x-1, y-1) << '\n';
} while(--m);
}