Pagini recente » Diferente pentru runda/igorj_mentorat1 intre reviziile 2 si 4 | Istoria paginii utilizator/teodor_teo97 | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #201469)
Cod sursa(job #201469)
#include <stdio.h>
#define FIN "stramosi.in"
#define FOUT "stramosi.out"
#define N_MAX 251000
#define N_MIN 20
long n,m,c;
long b[N_MIN][N_MAX];
long desc(long x)
{
long nr=0;
while (x!=1)
{
x/=2;
++nr;
}
return nr;
}
long intrebare(long x, long y)
{
c=0;
while (x)
{
if(x%2)
y=b[c][y];
x/=2;
++c;
}
return y;
}
int main()
{
long j,i,p,q;
freopen(FIN,"rt",stdin);
scanf("%ld %ld", &n, &m);
for(i=1;i<=n;++i)
scanf("%ld", &b[0][i]);
int l=desc(n);
for(i=1;i<=l;++i)
for(j=1;j<=n;++j)
b[i][j]=b[i-1][b[i-1][j]];
freopen(FOUT,"wt",stdout);
for(i=1;i<=m;i++)
{
scanf("%ld %ld", &q, &p);
printf("%d\n",intrebare(p,q));
}
return 0;
}