Pagini recente » Cod sursa (job #2569325) | Cod sursa (job #1204612) | Cod sursa (job #2910513) | Cod sursa (job #2191347) | Cod sursa (job #2988159)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int tata[2500001],stramosi[20][250001];
void calculeaza_stramosi(int n){
int p,stramos0;
for(int i=1;i<=n;i++){
stramosi[0][i]=tata[i];
}
for(p=1;p<20;p++){
for(int i=1;i<=n;i++){
stramos0=stramosi[p-1][i];
stramosi[p][i]=stramosi[p-1][stramos0];
}
}
}
int interogare_stramos(int nod, int k){
int p=1,e=0;
while(2*p<=k){
p*=2;
e++;
}
if(p==k){
return stramosi[e][nod];
}
else return interogare_stramos(stramosi[e][nod],k-p);
}
int main()
{
int n,m,i,nod,k;
fin>>n>>m;
for(int i=1;i<=n;i++){
fin>>tata[i];
}
calculeaza_stramosi(n);
/* for(int i=0;i<=3;i++){
for(int j=1;j<=n;j++){
fout<<stramosi[i][j]<<" ";
}
fout<<'\n';
} */
for(int i=1;i<=m;i++){
fin>>nod>>k;
fout<<interogare_stramos(nod,k)<<'\n';
}
return 0;
}