Pagini recente » Profil Djok | Cod sursa (job #2057159) | Cod sursa (job #19964) | Cod sursa (job #74956) | Cod sursa (job #2492453)
#include <bits/stdc++.h>
#define MAXN 100005
#define MAXQ 1000005
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n, m, a[MAXN], parent[MAXN], ans[MAXQ];
int find_set(int v) {
if (v == parent[v])
return v;
return parent[v] = find_set(parent[v]);
}
struct Query {
int L, R, idx;
Query(int L, int R, int idx):L(L),R(R),idx(idx){}
};
vector<int> answer;
vector<Query> container[MAXN];
int main()
{
in >> n >> m;
for(int i = 0; i < n; i++) {
in >> a[i];
parent[i] = i;
}
for(int i = 0; i < m; i++) {
int l, r;
in >> l >> r;
--l;
--r;
container[r].push_back(Query(l,r,i));
}
stack<int> s;
for (int i = 0; i < n; i++) {
while (!s.empty() && a[s.top()] > a[i]) {
parent[s.top()] = i;
s.pop();
}
s.push(i);
for (Query q : container[i]) {
ans[q.idx] = a[find_set(q.L)];
}
}
for(int i = 0; i < m; i++)
out << ans[i] << '\n';
return 0;
}