Pagini recente » Cod sursa (job #2338359) | Cod sursa (job #1184115) | Cod sursa (job #2722525) | Cod sursa (job #277883) | Cod sursa (job #1104072)
//#include <iostream>
#include <fstream>
#include<algorithm>
#include<cmath>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
int i,j,k,v[250001],a[250001][20],n,m,top;
pair <int,int> c[300001];
int pow(int a, int b){
int x=1;
while(b--){
x*=a;
}
return x;
}
int main()
{
cin>>n>>m;
for(i=1;i<=n;i++){
cin>>v[i];
}
for(j=1;j<=m;j++){
cin>>c[j].first>>c[j].second;
}
for(i=1;i<=n;i++){
a[i][0]=v[i];
}
for(j=1;j<=19;j++){
for(i=1;i<=n;i++){
if(a[a[i][j-1]][j-1]==0){
continue;
}
a[i][j]=a[a[i][j-1]][j-1];
}
}
for(j=1;j<=m;j++){
top=c[j].first;
while(c[j].second>0){
for(k=0;pow(2,k)<=c[j].second;k++){
}
top=a[top][k-1];
c[j].second-=pow(2,k-1);
}
cout<<top<<'\n';
}
return 0;
}