Pagini recente » Cod sursa (job #1819999) | Cod sursa (job #895542) | Borderou de evaluare (job #565522) | Monitorul de evaluare | Cod sursa (job #1943654)
#include <cstdio>
const int NMAX = 250000;
const int LOG = 17;
int n, m;
int t[1 + LOG][1 + NMAX];
void build()
{
for(int i = 1; i <= LOG ; i++)
{
for(int nod = 1; nod <= n; nod++)
{
t[i][nod] = t[i - 1][t[i - 1][nod]];
}
}
}
int answer(int nod, int dist)
{
int val = 1 << LOG;
int count = LOG;
while(val != 0)
{
if((val&dist)!=0)
{
nod = t[count][nod];
}
val >>= 1;
count--;
}
return nod;
}
int main()
{
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++)
{
scanf("%d", &t[0][i]);
}
build();
for(int i=1; i<=m; i++)
{
int q, p;
scanf("%d %d", &q, &p);
printf("%d\n", answer(q, p));
}
return 0;
}