Pagini recente » Cod sursa (job #3148794) | Cod sursa (job #1579525) | Cod sursa (job #2043834) | Cod sursa (job #1625415) | Cod sursa (job #16053)
Cod sursa(job #16053)
#include <stdio.h>
long tata[250005][23],x,i,j,z,n,m,nod,p,q,nr;
FILE *f=fopen("stramosi.in","r");
FILE *g=fopen("stramosi.out","w");
int main()
{
fscanf(f,"%ld %ld\n",&n,&m);
for (i=1; i<=n; i++) {
fscanf(f,"%ld",&x);
tata[i][0]=x;
}
z=n; x=1;
while (z>1) { z=z/2; x++; }
for (i=1; i<=n; i++)
for (j=1; j<=x; j++) {
tata[i][j]=tata[tata[i][j-1]][j-1];
}
for (i=1; i<=m; i++) {
fscanf(f,"%ld %ld\n",&q,&p);
nod=q; nr=p;
while (nr>0) {
z=nr; x=0;
while (z>1) {z=z/2; x++ ;}
if (nr>1) nr=nr-(1<<x); else nr=0;
nod=tata[nod][x];
}
fprintf(g,"%ld\n", nod);
}
return 0;
}