Pagini recente » Cod sursa (job #2967650) | Cod sursa (job #1351478) | Cod sursa (job #1405146) | Cod sursa (job #689838)
Cod sursa(job #689838)
#include <fstream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
#define NMAX 350010
int S[NMAX];
int A[NMAX*2];
int P[NMAX];
int NrStramos[NMAX];
int N, M;
int nr=0;
void parcurge(int e, int min)
{
if (S[e] && !P[e]) parcurge(S[e], min);
nr++;
A[nr] = e;
if (!P[e]) P[e] = nr, NrStramos[e] = nr - min - 1;
}
int pStramos(int x, int p)
{
while (p){
if (NrStramos[x] == 0) return 0;
if (NrStramos[x]>=p) return A[P[x]-p];
x = A[P[x]-NrStramos[x]];
p -= NrStramos[x];
}
return 0;
}
int main()
{
int i, x, p;
f >> N >> M;
for (i=1; i<=N; i++) f >> S[i];
for (i=N; i>0; i--)
if (!P[i]) parcurge(i,nr);
for (i=0; i<M; i++) {
f >> x >> p;
g << pStramos(x,p) << '\n';
}
}