Pagini recente » Cod sursa (job #2583271) | Cod sursa (job #1548727) | Cod sursa (job #2790255) | Cod sursa (job #2351674) | Cod sursa (job #2033980)
#include <cstdio>
const int MAXN = 2e5 + 5e4;
const int LOG = 20;
int dp[MAXN + 1][LOG + 1];
int main() {
int n, m, q, p, ans, k;
FILE *fin = fopen("stramosi.in", "r");
fscanf(fin, "%d%d", &n, &m);
for (int i = 1; i <= n; ++i) {
fscanf(fin, "%d", &dp[i][0]);
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; (1 << j) <= n; ++j) {
dp[i][j] = dp[dp[i][j - 1]][j - 1];
}
}
FILE *fout = fopen("stramosi.out", "w");
for (int i = 0; i < m; ++i) {
fscanf(fin, "%d%d", &q, &p);
k = 0;
ans = q;
while (p) {
if (p & 1) {
ans = dp[ans][k];
}
++k;
p >>= 1;
}
fprintf(fout, "%d\n", ans);
}
fclose(fin);
fclose(fout);
return 0;
}