Pagini recente » Cod sursa (job #1907642) | Cod sursa (job #2556544) | Cod sursa (job #2875235) | Cod sursa (job #362465) | Cod sursa (job #2903389)
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int N, M, V[250001][20];
void preprocess()
{
for (int j = 1; (1 << j) <= N; j++)
for (int i = 1; i <= N; i++)
V[i][j] = V[V[i][j - 1]][j - 1];
}
int query(int x, int y)
{
int p = 0;
while (y >= 1)
{
if ((y & 1) == 1)
{
x = V[x][p];
}
p++;
y = y >> 1;
}
return x;
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; i++)
{
fin >> V[i][0];
}
preprocess();
// for (int j = 0; (1 << j) <= N; j++)
// {
// for (int i = 1; i <= N; i++)
// {
// cout << V[i][j] << ' ';
// }
// cout << '\n';
// }
for (int i = 1; i <= M; i++)
{
int P, Q;
fin >> Q >> P;
fout << query(Q, P) << '\n';
}
}