Pagini recente » Cod sursa (job #148185) | Cod sursa (job #2203072) | Cod sursa (job #1600778) | Cod sursa (job #3351149) | Cod sursa (job #3348219)
//solutie misto cu dsu (arpa's trick)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n, q;
int v[100005];
int tata[100005];
vector<pair<int, int>> qs[1000005];
int ans[1000005];
int rad(int x)
{
if(x == tata[x])
{
return x;
}
int r = rad(tata[x]);
tata[x] = r;
return r;
}
int main()
{
in>>n>>q;
for(int i = 1; i<=n; i++)
{
in>>v[i];
tata[i] = i;
}
int x, y;
for(int i = 1; i<=q; i++)
{
in>>x>>y;
qs[y].push_back({x, i});
}
stack<int> s;
for(int i = 1; i<=n; i++)
{
while(!s.empty() && v[s.top()] > v[i])
{
tata[s.top()] = i;
s.pop();
}
s.push(i);
for(auto it: qs[i])
{
ans[it.second] = v[rad(it.first)];
}
}
for(int i = 1; i<=q; i++)
{
out<<ans[i]<<'\n';
}
return 0;
}