Pagini recente » Cod sursa (job #871346) | Cod sursa (job #1991768) | Cod sursa (job #446469) | Cod sursa (job #1416944) | Cod sursa (job #2009010)
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
ifstream F("stramosi.in");
ofstream G("stramosi.out");
int n, m, x, y, t[250005], l[250005], ans[300005], lng, stc[250005], k;
vector<int> w[250005];
vector<pair<int, int> > a[300005];
stack<int> st;
bitset<250005> v;
int main()
{
F >> n >> m;
for(int i = 1; i <= n; ++ i) F >> t[i], w[t[i]].push_back(i);
for(int i = 1; i <= m; ++ i)
{
F >> x >> y;
a[x].push_back({y, i});
}
vector<pair<int, int> > :: iterator it;
for(int i = 1; i <= n; ++ i)
{
if(!v[i])
{
stc[++ k] = i;
st.push(i);
while(!st.empty())
{
x = st.top();
v[x] = 1;
lng = w[x].size();
while(l[x] < lng)
{
if(!v[w[x][l[x]]])
{
st.push(w[x][l[x]]);
stc[++ k] = w[x][l[x]];
break;
}
l[x] ++;
}
if(l[x] == lng)
{
for(it = a[x].begin(); it != a[x].end(); ++ it)
if(k - (*it).f > 0)
ans[(*it).s] = stc[k - (*it).f];
else ans[(*it).s] = 0;
st.pop(); -- k;
}
}
}
}
for(int i = 1; i <= m; ++ i) G << ans[i] << '\n';
return 0;
}