Pagini recente » Cod sursa (job #2810072) | Cod sursa (job #3200263) | Cod sursa (job #2380296) | Cod sursa (job #1359006) | Cod sursa (job #1234451)
#include<bits/stdc++.h>
using namespace std;
struct cell
{
int Q,P;
int indice;
};
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int NMAX=250005;
const int MMAX=300005;
int n,m,sol[MMAX],viz[NMAX];
vector<int>v[NMAX];
vector<cell>t[NMAX];
inline void DFS(int x,int nr)
{
viz[nr]=x;
for (vector<cell>::iterator it=t[x].begin();it!=t[x].end();it++)
sol[(*it).indice]=viz[max(0,nr-(*it).P)];
for (vector<int>::iterator it=v[x].begin();it!=v[x].end();it++)
DFS(*it,nr+1);
viz[nr]=0;
}
int main()
{
int i,x;
cell k;
fin>>n>>m;
for (i=1;i<=n;i++)
{
fin>>x;
v[x].push_back(i);
}
for (i=1;i<=m;i++)
{
fin>>k.Q>>k.P;
k.indice=i;
t[k.Q].push_back(k);
}
DFS(0,0);
for (i=1;i<=m;i++) fout<<sol[i]<<"\n";
return 0;
}