Pagini recente » Cod sursa (job #882458) | Cod sursa (job #2098134) | Cod sursa (job #1827737) | Cod sursa (job #2152109) | Cod sursa (job #124343)
Cod sursa(job #124343)
#include <stdio.h>
#include <math.h>
long b[20][250000], n, m, a[250000];
long query(long p, long q)
{
long k = 0;
while (1<<k <= p) ++k;
k--;
if (p==0) return q;
else return query(p-(1<<k),b[k][q]);
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
long i, k, p, q, rez;
scanf("%ld %ld",&n,&m);
for (i = 1; i <= n; i++)
scanf("%ld",&a[i]);
for (i = 1; i <= n; ++i)
{
b[1][i] = a[a[i]];
b[0][i] = a[i];
}
for (k = 2; 1<<k <= n; ++k)
for (i = 1; i <= n; ++i) b[k][i] = b[k - 1][b[k - 1][i]];
for (i = 1; i <= m; i++)
{
scanf("%ld %ld", &q, &p);
rez = query(p,q);
printf("%ld\n", rez);
}
return 0;
}