Pagini recente » Cod sursa (job #1026961) | Cod sursa (job #1478707) | Cod sursa (job #3182173) | Cod sursa (job #1027801) | Cod sursa (job #1253269)
#include <iostream>
#include <cstdio>
using namespace std;
#define maxN 250005
#define maxLog 25
#define maxLLog 20
long n,m,i,j,nod,q,p;
long dp[maxN][maxLog];
bool util;
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%ld %ld",&n,&m);
for(i=1;i<=n;i++) scanf("%ld",&dp[i][0]);
for(j=1;j<=maxLLog;j++){
util = false;
for(i=1;i<=n;i++){
if(!dp[i][j-1]) continue;
nod = dp[i][j-1];
if(!dp[nod][j-1]) continue;
dp[i][j] = dp[nod][j-1];
util = true;
}
if(!util) break;
}
for(;m;m--){
scanf("%ld %ld",&q,&p);
i = 0;
while(p){
if(p&1) q = dp[q][i];
p >>= 1;
i++;
//if(!q) break;
}
printf("%ld\n",q);
}
return 0;
}