Pagini recente » Istoria paginii runda/oji_cls.10/clasament | Cod sursa (job #2410168) | Profil MeHigh_alexandru | Cod sursa (job #1153630) | Cod sursa (job #205974)
Cod sursa(job #205974)
#include<stdio.h>
int M,N;
int s[250005][20];
FILE *fin=fopen("stramosi.in","r"),
*fout=fopen("stramosi.out","w");
int rezolvare(int q,int p){
int lg=0;
while(p){
if(p%2) q=s[q][lg];
p/=2;
++lg;
}
return q;
}
int main(){
fscanf(fin,"%d %d",&N,&M);
for(int i=1;i<=N;i++)
fscanf(fin,"%d",&s[i][0]);
for(int j=1;j<=19;j++)
for(int i=1;i<=N;i++)
s[i][j]=s[s[i][j-1]][j-1];
/*
for(int i=1;i<=N;i++){
for(int j=0;j<=5;j++)
fprintf(fout,"%d ",s[i][j]);
fprintf(fout,"\n");
}
*/
for(int i=1;i<=M;i++){
int q,p;
fscanf(fin,"%d %d",&q,&p);
int lg=0;
while(p){
if(p%2)
q=s[q][lg];
p/=2;
++lg;
}
fprintf(fout,"%d\n",q);
}
fclose(fin);
fclose(fout);
return 0;
}