Pagini recente » Cod sursa (job #1260487) | Monitorul de evaluare | Cod sursa (job #970848) | Cod sursa (job #1553516) | Cod sursa (job #2052476)
#include <cstdio>
#include <vector>
using namespace std;
int d[250001][18];
int v[250001];
int main()
{
FILE *fin=fopen ("stramosi.in","r");
FILE *fout=fopen ("stramosi.out","w");
int n,m,i,k,a,b;
fscanf (fin,"%d%d",&n,&m);
for (i=2;i<=n;i++)
v[i]=v[i/2]+1;
for (i=1;i<=n;i++)
fscanf (fin,"%d",&d[i][0]);
k=1;
while ((1<<k)<=n){
for (i=1;i<=n;i++)
d[i][k]=d[d[i][k-1]][k-1];
k++;
}
for (;m;m--){
fscanf (fin,"%d%d",&a,&b);
while (b && a!=0){
a=d[a][v[b]];
b=b-(1<<v[b]);
}
fprintf (fout,"%d\n",a);
}
return 0;
}