Pagini recente » Cod sursa (job #1604657) | Cod sursa (job #671877) | Cod sursa (job #437240) | Cod sursa (job #2141801) | Cod sursa (job #738571)
Cod sursa(job #738571)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define NMAX 100005
#define LOGNMAX 20
int N, M, A[NMAX], P[NMAX][LOGNMAX];
void preprocess(){
for(int i = 0; i < N; ++i)
P[i][0] = A[i];
for(int j = 1; j < LOGNMAX; ++j)
for(int i = 0; (i + (1 << j) - 1) < N; ++i)
P[i][j] = min(P[i][j-1], P[i + (1 << (j-1))][j-1]);
}
int solve(int x, int y){
int z = (y - x + 1), log;
for(log = 0; (1<<log) < z; ++log);
if(log > 0) --log;
return min(P[x][log], P[y - (1<<log) + 1][log]);
}
int main(){
ifstream in ("rmq.in");
ofstream out ("rmq.out");
in >> N >> M;
for(int i = 0; i < N; ++i)
in >> A[i];
preprocess();
for(int i = 0; i < M; ++i){
int x, y;
in >> x >> y;
int ret = solve(x-1, y-1);
out << ret << endl;
}
return 0;
}