Pagini recente » Cod sursa (job #1417759) | Cod sursa (job #1993186) | Cod sursa (job #2905821) | Cod sursa (job #2354103) | Cod sursa (job #1850622)
#include <cstdio>
#include <vector>
#include <algorithm>
#define NMax 300000
#define x first
#define y second
using namespace std;
typedef pair<int, int> abc;
vector<int> a[NMax+1];
vector<abc> q[NMax+1];
int stiva[NMax+1];
int res[NMax+1];
int v[NMax+1];
int nr;
void DFS(int k)
{
abc r;
for(int i = 0; i < q[k].size(); ++i)
{
r = q[k][i];
if(nr < r.x) res[r.y] = 0;
else res[r.y] = stiva[nr-r.x+1];
}
stiva[++nr] = k;
for(int i = 0; i < a[k].size(); ++i) DFS(a[k][i]);
--nr;
}
int main(){
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
int i,N,M,x,y;
scanf("%d %d",&N,&M);
for(i = 1; i <= N; ++i)
{
scanf("%d",&x);
a[x].push_back(i);
v[i] = x;
}
for(i = 1; i <= M; ++i)
{
scanf("%d %d",&x,&y);
q[x].push_back({y,i});
}
for(i = 1; i <= N; ++i)
if( !v[i] ) DFS(i);
for(i = 1; i <= M; ++i) printf("%d\n", res[i]);
return 0;
}