Pagini recente » Cod sursa (job #168) | Cod sursa (job #169617) | Cod sursa (job #282785) | Cod sursa (job #1809080) | Cod sursa (job #3281845)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
const int NMAX = 100000,
KMAX = 16;
int N, T[KMAX+1][NMAX+1], lg2[NMAX+1];
void buildSparseTable() {
for (int i=1; (1<<i) <= N; i++)
for (int j=1; j + (1<<i) - 1 <= N; j++)
T[i][j] = min(T[i-1][j], T[i-1][j + (1<<(i-1))]);
}
int querry(int x, int y) {
int k = lg2[y-x+1];
return min(T[k][x], T[k][y-(1<<k)+1]);
}
int main()
{
int M, x, y;
f >> N >> M;
lg2[0] = -1;
for (int i=1; i<=N; i++) {
f >> T[0][i];
lg2[i] = lg2[i>>1]+1;
}
lg2[0] = 0;
buildSparseTable();
while(M--) {
f >> x >> y;
g << querry(x, y) << '\n';
}
f.close();
g.close();
return 0;
}