Pagini recente » Cod sursa (job #457348) | Cod sursa (job #3241688) | Cod sursa (job #1351307) | Cod sursa (job #2298344) | Cod sursa (job #1976958)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100002
#define LGMAX 19
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int RMQ[LGMAX][NMAX], lg[NMAX];
void prepareRMQ(const int N) {
for (int i = 1; i <= N; ++i)
fin >> RMQ[0][i];
for (int i = 2; i <= N; ++i)
lg[i] = lg[i >> 1] + 1;
for (int k = 1; (1 << k) <= N; ++k) {
int t = (1 << (k - 1));
for (int i = 1; i + t - 1 <= N; ++i) {
RMQ[k][i] = min(RMQ[k - 1][i], RMQ[k - 1][i + t]);
}
}
}
int query(int st, int dr) {
int dist = dr - st + 1;
int t = lg[dist];
return min(RMQ[t][st], RMQ[t][dr - (1 << t) + 1]);
}
int main() {
int N, M;
fin >> N >> M;
prepareRMQ(N);
int x, y;
while (M--) {
fin >> x >> y;
fout << query(x, y) << "\n";
}
return 0;
}