Pagini recente » Cod sursa (job #1508798) | Cod sursa (job #2542694) | Cod sursa (job #1860399) | Cod sursa (job #3003658) | Cod sursa (job #780594)
Cod sursa(job #780594)
#include<cstdio>
#include<vector>
const int maxx1=250005,maxx2=300005;
using namespace std;
int stiva[maxx1],n,m,i,a,b,nr,ans[maxx2],q[maxx2],tata[maxx1];
vector <int> quest[maxx1],x[maxx1];
void df(int nod)
{
int i;
stiva[++nr]=nod;
for(i=0;i<quest[nod].size();i++)
if(q[quest[nod][i]]>=nr)
ans[quest[nod][i]]=0;
else
ans[quest[nod][i]]=stiva[nr-q[quest[nod][i]]];
for(i=0;i<x[nod].size();i++)
if(tata[nod]!=x[nod][i])
df(x[nod][i]);
nr--;
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&tata[i]);
x[tata[i]].push_back(i);
x[i].push_back(tata[i]);
}
for(i=1;i<=m;i++)
{
scanf("%d %d",&a,&b);
quest[a].push_back(i);
q[i]=b;
}
for(i=1;i<=n;i++)
if(tata[i]==0)
df(i);
for(i=1;i<=m;i++)
printf("%d\n",ans[i]);
return 0;
}