Pagini recente » Rezultatele filtrării | Borderou de evaluare (job #2570725) | Rezultatele filtrării | Rezultatele filtrării | Cod sursa (job #2889976)
#include <iostream>
FILE *fin = fopen("stramosi.in", "r");
FILE *fout = fopen("stramosi.out", "w");
int dads[20][250005];
int main()
{
int N, M;
fscanf(fin, "%d %d", &N, &M);
for (int i = 1; i <= N; i++)
fscanf(fin, "%d", &dads[0][i]);
/* for (int i = 1; i <= N; i++)
{
if (dads[0][i] == 0)
dads[0][i] = i;
}*/
for (int j = 1; j < 20; j++)
for (int k = 1; k <= N; k++)
dads[j][k] = dads[j - 1][dads[j - 1][k]];
while (M--)
{
int q, p;
fscanf(fin, "%d %d", &q, &p);
int pow2 = 0;
int current = q;
while (p != 0)
{
if ((p & (1 << pow2)) != 0)
{
p -= 1 << pow2;
current = dads[pow2][current];
}
pow2++;
}
fprintf(fout, "%d\n", current);
}
}