Pagini recente » Cod sursa (job #1372419) | Cod sursa (job #2824857) | Cod sursa (job #128157) | Cod sursa (job #294299) | Cod sursa (job #737675)
Cod sursa(job #737675)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define NMAX 100005
#define LOGNMAX 20
int A[NMAX], N, M;
int P[NMAX][LOGNMAX];
void preprocess(){
for(int i = 0; i < N; ++i)
P[i][0] = A[i];
for(int j = 1; (1<<j) <= N; ++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);
--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;
}