Pagini recente » Borderou de evaluare (job #3208682) | Monitorul de evaluare | Borderou de evaluare (job #2480232) | Borderou de evaluare (job #2129902) | Cod sursa (job #179435)
Cod sursa(job #179435)
#include <cstdio>
#include <iostream>
#define DIM 260000
using namespace std;
int N, K, P, Q, S[DIM][19], log[DIM], sol;
int main()
{
FILE *fin = fopen("stramosi.in", "r");
FILE *fout = fopen("stramosi.out", "w");
fscanf(fin, "%d%d", &N, &K);
for (int i = 1; i <= N; i++)
fscanf(fin, "%d", &S[i][0]);
for (int i = 2; i <= N; i++)
log[i] = log[i / 2] + 1;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= log[N]; j++)
{
if (!S[S[i][j - 1]][j - 1]) break;
S[i][j] = S[S[i][j - 1]][j - 1];
}
//cout << N << " " << K; cin.get();
for (int i = 1; i <= K; i++)
{
fscanf(fin, "%d%d", &Q, &P);
while (P)
{
sol = S[Q][log[P]];
P -= (1 << (log[P]));
Q = sol;
}
fprintf(fout, "%d\n", sol);
}
fclose(fin);
fclose(fout);
return 0;
}