Pagini recente » Cod sursa (job #2147917) | Cod sursa (job #2649190) | Cod sursa (job #897977) | Cod sursa (job #2000220) | Cod sursa (job #2767208)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int nmax = 1e5 + 50;
int n, m, lookup[nmax][20];
vector <int> v;
void preprocess() {
for (int i = 0; i < n; ++i) lookup[i][0] = i;
for (int j = 1; (1 << j) <= n; ++j) {
for (int i = 0; i + (1 << j) - 1 < n; ++i) {
if (v[lookup[i][j - 1]] < v[lookup[i + (1 << (j - 1))][j - 1]])
lookup[i][j] = lookup[i][j - 1];
else
lookup[i][j] = lookup[i + (1 << (j - 1))][j - 1];
}
}
}
int query(int l, int r) {
int k = (int)log2(r - l + 1);
int ans = 0;
if (v[lookup[l][k]] < v[lookup[r - (1 << k) + 1][k]])
ans = v[lookup[l][k]];
else
ans = v[lookup[r - (1 << k) + 1][k]];
return ans;
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; ++i) {
int x;
fin >> x;
v.push_back(x);
}
preprocess();
for (int i = 1; i <= m; ++i) {
int x, y;
fin >> x >> y;
fout << query(x - 1, y - 1) << '\n';
}
return 0;
}