Pagini recente » Cod sursa (job #139013) | Cod sursa (job #2582678) | Cod sursa (job #3145085) | Cod sursa (job #568686) | Cod sursa (job #2973425)
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int Stramos(int Q, int P, vector<int> &V)
{
if (P == 0)
return Q;
if (V[Q] == -1)
return -1;
return Stramos(V[Q], P - 1, V);
}
int Stra_Rad(int Q, int P, vector<int> &V, vector<int> &StraV, int sqr)
{
while (P - sqr >= 0 && Q != -1)
{
Q = StraV[Q];
P -= sqr;
}
if (P == 0)
return Q;
if (Q == -1)
return -1;
return Stramos(Q, P, V);
}
int main()
{
int n, m;
in>> n >> m;
vector<int> V(n), StraV(n);
for (int i = 0; i < n; i++)
{
in>> V[i];
V[i]--;
}
int sqr = sqrt(n);
for (int i = 0; i < n; i++)
StraV[i] = Stramos(i, sqr, V);
for (int t = 0; t < m; t++)
{
int Q, P;
in>> Q >> P; Q--;
out<< Stra_Rad(Q, P, V, StraV, sqr) + 1 << "\n";
}
return 0;
}