Pagini recente » Cod sursa (job #1497087) | Cod sursa (job #2168921) | Cod sursa (job #3241529) | Cod sursa (job #1212236) | Cod sursa (job #2543734)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,m, st, dr, e;
int lg[100005];
int d[20][100005];
int main() {
fin>>n>>m;
for (int i=1;i<=n;++i)
fin>>d[0][i];
for (e = 1; (1<<e) <= n ; ++e)
for (int i=1;i<=n;++i) {
d[e][i] = d[e-1][i];
if (i + (1<<(e-1)) <= n && d[e][i]>d[e-1][i + (1<<(e-1))])
d[e][i] = d[e-1][i + (1<<(e-1))];
}
lg[1] = 0;
for (int i=2;i<=n;++i)
lg[i] = lg[i/2] + 1;
for (int i=1;i<=m;++i) {
fin>>st>>dr;
e = lg[dr-st + 1];
fout<<min(d[e][st], d[e][dr - (1<<e) + 1])<<"\n";
}
}