Pagini recente » Cod sursa (job #667489) | Cod sursa (job #1687284)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int MAX_N = 250007, maxPow = log2(MAX_N);
int N, M, dad[maxPow + 1][MAX_N];
void citire()
{
fin >> N >> M;
for(int i = 1 ; i <= N ; ++i)
{
int x ; fin >> x;
dad[0][i] = x;
}
}
void init()
{
for(int step = 1; (1 << step) <= N; ++step)
for(int i = 1; i <= N; ++i)
dad[step][i] = dad[step - 1][dad[step - 1][i]];
}
void rasp(int x , int cat)
{
int num = x;
for(int i = 20; i >= 0; --i)
if(cat & (1 << i)) num = dad[i][num];
fout << num << '\n';
}
void solve()
{
while(M--)
{
int x , cat;
fin >> x >> cat;
rasp(x , cat);
}
}
int main()
{
citire();
init();
solve();
return 0;
}