Pagini recente » Cod sursa (job #2592461) | Cod sursa (job #2248984) | Cod sursa (job #2860791) | Istoria paginii runda/concurs./clasament | Cod sursa (job #2869584)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int rmq[35][100001], v[100001], log2[32];
int n, m, a, b;
int main()
{
fin>>n>>m;
for (int i=1; i<=n; i++) {
fin>>v[i];
}
for (int i=1; i<=n; i++) {
rmq[0][i] = v[i];
}
for (int i=1; (1 << i) <=n; i++) {
for (int j=1; j + (1 << i) - 1 <=n; j++) {
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+(1 << (i-1))]);
}
}
log2[1]=0;
for (int i=2; i<=n; i++) {
log2[i] = log2[i/2] + 1;
}
for (int i=1; i<=m; i++) {
fin>>a>>b;
int len = b - a + 1;
int l = log2[len];
int crmq = min(rmq[l][a], rmq[l][b-(1 << l)+1]);
fout<<crmq<<"\n";
}
return 0;
}