Pagini recente » Cod sursa (job #1310627) | Cod sursa (job #2476878) | Cod sursa (job #337422) | Cod sursa (job #1647796) | Cod sursa (job #2891706)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int e[100001];
int lookup[18][100001]; //2^17 > 100000, cel mai mic nr pt care se intampla asta. +1 just in case.
int minim(int a, int b) {
if (a > b) {
return b;
}
return a;
}
int main()
{
int n, m, i, p;
ifstream in("rmq.in");
ofstream out("rmq.out");
in >> n >> m;
for (i = 0; i < n; i++) {
in >> lookup[0][i];
}
e[1] = 0;
for (i = 2; i <= n; i++) {
e[i] = e[i/2] + 1;
}
for (p = 2; p <= n; p*= 2) {
for (i = 1; i <= n - p/2; i++) {
lookup[e[p]][i] = minim(lookup[e[p]-1][i], lookup[e[p]-1][i+p/2]);
}
}
int x,y;
for (i = 0; i < m; i++) {
in >> x >> y;
out << minim(lookup[e[y-x-1]][x], lookup[e[y-x-1]][y - (1 << e[y-x+1])]);
}
return 0;
}