Pagini recente » Cod sursa (job #1131271) | Monitorul de evaluare | simulare_de_oni_5 | Cod sursa (job #971828) | Cod sursa (job #2706054)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f;
ofstream g;
int n, q;
int rmq[20][100001];
int a[100001];
int lg[100001];
void read() {
int i;
f.open("rmq.in");
f >> n >> q;
for (i = 1; i <= n; i++)
f >> a[i];
}
void solve() {
int i, j, d;
for (i = 1; i <= n; i++)
rmq[0][i] = a[i];
//lg[i] = log2(i)
lg[1] = 0;
for (i = 2; i <= n; i++)
lg[i] = 1 + lg[i / 2];
for (i = 1; (1 << i) <= n; i++)
for (j = 1; j <= n - (1 << i) + 1; j++) {
d = (1 << (i - 1));
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + d]);
}
int x, lung, y, shift;
g.open("rmq.out");
for (i = 1; i <= q; i++) {
f >> x >> y;
lung = y - x + 1;
d = lg[lung];
shift = lung - (1 << d);
g << min(rmq[d][x], rmq[d][x + shift]) << '\n';
}
f.close();
g.close();
}
int main() {
read();
solve();
return 0;
}