Pagini recente » Cod sursa (job #562320) | Cod sursa (job #2137080) | Cod sursa (job #2746923) | Cod sursa (job #2796326) | Cod sursa (job #2604815)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, q, rmq[18][100010], lg[100010];
int main() {
fin >> n >> q;
for (int i = 1; i <= n; i++)
fin >> rmq[0][i];
for (int p = 1; 1 << p <= n; p++)
for (int j = 1; j + (1 << p) - 1 <= n; j++)
rmq[p][j] = min(rmq[p - 1][j], rmq[p - 1][j + (1 << (p - 1))]);
for (int i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
while (q--) {
int a, b;
fin >> a >> b;
int diff = b - a + 1;
fout << min(rmq[lg[diff]][a], rmq[lg[diff]][b - (1 << lg[diff]) + 1]) << '\n';
}
return 0;
}