Pagini recente » Cod sursa (job #454726) | Cod sursa (job #432472) | Cod sursa (job #1051425) | Cod sursa (job #31044) | Cod sursa (job #2136330)
#include <iostream>
#include <fstream>
#include <cmath>
#define POW2(X) (1<<(X))
using namespace std;
ifstream f("rmq.in" );
ofstream g("rmq.out");
int M, N;
int v[100005], rmq[100005][32];
void Preprocess() {
for ( int i=1; i<=N; i++ )
rmq[i][0] = v[i];
for ( int p=1; POW2(p)<=N; p++ )
for ( int i=1; i+POW2(p)-1<=N; i++ )
rmq[i][p] = min(rmq[i][p-1], rmq[i+POW2(p-1)-1][p-1]);
}
int Query(int x, int y) {
int power = (int)log2(x-y+1);
return min(rmq[x][power], rmq[y-POW2(power)+1][power]);
}
int main() {
f >> N >> M;
for ( int i=1; i<=N; i++ )
f >> v[i];
Preprocess();
for ( int i=1; i<=M; i++ )
{
int a, b;
f >> a >> b;
g << Query(a, b) << '\n';
}
}