Pagini recente » Cod sursa (job #167679) | Cod sursa (job #1931945) | Cod sursa (job #1458359) | Cod sursa (job #635158) | Cod sursa (job #3134262)
#include <iostream>
#include <fstream>
using namespace std;
int v[1000001][20];
int main()
{
ifstream in("rmq.in");
ofstream out("rmq.out");
int n, m, x1 = 2, x2 = 1, x3, x4, x5;
in >> n >> m;
for (int i = 1; i <= n; i++)
in >> v[i][0];
while (x1 <= n) {
for (int i = 1; i <= n; i++)
v[i][x2] = min(v[i][x2 - 1], v[i + x1 / 2][x2 - 1]);
x2++;
x1 *= 2;
}
for (int i = 1; i <= m; i++) {
in >> x3 >> x4;
x1 = 1;
x5 = 0;
if (x1 * 2 <= x4 - x3 + 1) {
do {
x1 = x1 * 2;
x5++;
} while (x1 * 2 <= x4 - x3 + 1);
}
out << min(v[x3][x5], v[x4 - x1 + 1][x5]) << "\n";
}
return 0;
}