Pagini recente » Cod sursa (job #225353) | Cod sursa (job #2745978) | Cod sursa (job #553228) | Cod sursa (job #700445) | Cod sursa (job #199443)
Cod sursa(job #199443)
#include <stdio.h>
#include <algorithm>
#define mx 250010
using namespace std;
long ac[mx][22];
long n, m, x, p, q;
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%ld %ld", &n, &m);
for (int i = 1; i <= n; i++)
{
scanf("%ld", &x);
ac[i][1] = x;
}
for (int i = 1; i <= n; i++)
{
long r = ac[i][1];
for (int j = 1; j < 20; j++)
{
r = ac[r][j];
ac[i][j + 1] = r;
}
}
for (int i = 0; i < m; i++)
{
scanf("%ld %ld", &q, &p);
int x = 0;
while ((1 << x) <= p)
x++;
while (p && q)
{
x--;
if ((1 << x) <= p)
{
q = ac[q][x + 1];
p -= (1 << x);
}
}
printf("%ld\n", q);
}
fclose(stdin);
fclose(stdout);
return 0;
}