Pagini recente » Cod sursa (job #2962955) | Cod sursa (job #3198033) | Cod sursa (job #2049201) | Cod sursa (job #2506520) | Cod sursa (job #1935469)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
long int N, M, arr[100002], lg[100002], rmq[19][100002];
int main()
{
in >> N >> M;
for (int i = 1; i <= N; ++ i) {
in >> arr[i];
}
lg[1] = 0;
for (int i = 2; i <= N; ++ i) {
lg[i] = lg[i/2] + 1;
}
for (int i = 1; i <= N; ++ i) {
rmq[0][i] = arr[i];
}
for (int i = 1; (1 << i) <= N; ++ i) {
for (int j = 1; j + (1 << i) - 1 <= N; ++ j) {
int l = 1 << (i-1);
rmq[i][j] = min (rmq[i-1][j], rmq[i-1][j+l]);
}
}
for (int i = 1; i <= M; ++ i) {
int A, B, length, l, rem;
in >> A >> B;
length = B - A + 1;
l = lg[length];
rem = length - (1 << l);
out << min (rmq[l][A], rmq[l][A+rem]) << '\n';
}
return 0;
}