Pagini recente » Cod sursa (job #1135442) | Cod sursa (job #2482551) | Cod sursa (job #485888) | Cod sursa (job #455029) | Cod sursa (job #2500869)
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1 << 18;
int par[maxn], ans[maxn], n, a[maxn], l[maxn], q;
vector<int> qu[maxn];
int root(int v) { return par[v] == -1 ? v : par[v] = root(par[v]); }
int main(int argc, const char* argv[]) {
cout << maxn;
ifstream in;
ofstream out;
in.open("rmq.in");
out.open("rmq.out");
memset(par, -1, sizeof par);
in >> n;
in >> q;
for (int i = 0; i < n; i++)
in >> a[i];
for (int i = 0, r; i < q; i++) {
in >> l[i] >> r;
l[i]--;
r--;
qu[r].push_back(i);
}
stack<int> st;
for (int i = 0; i < n; i++) {
while (st.size() && a[st.top()] > a[i]) par[st.top()] = i, st.pop();
st.push(i);
for (auto qi : qu[i]) ans[qi] = a[root(l[qi])];
}
for (int i = 0; i < q; i++) out << ans[i] << '\n';
return 0;
}