Pagini recente » Cod sursa (job #168820) | Cod sursa (job #674866) | Cod sursa (job #2339277) | Cod sursa (job #2510950) | Cod sursa (job #2897611)
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int NMAX = 1e5+1, MMAX = 1e6 + 1;
int pow[33], log[NMAX], rmq[33][NMAX];
int main()
{
int n, m;
in >> n >> m;
for(int i = 1; i <= n; ++i)
in >> rmq[0][i];
///
log[1] = 0;
for(int i = 2; i <= NMAX; ++i)
log[i] = 1 + log[i/2];
for(int i = 0; i <= 32; ++i)
pow[i] = (1<<i);
///
for(int i = 1; (1<<i) <= n; ++i){
for(int j = 1; j <= n; ++j){
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + pow[i-1]]);
}
}
///
int a, b;
while(m--){
in >> a >> b;
int ceva = log[b - a];
out << min(rmq[ceva][a], rmq[ceva][b - pow[ceva] + 1]) << '\n';
}
return 0;
}