Pagini recente » Cod sursa (job #2479888) | Cod sursa (job #838428) | Cod sursa (job #1685688) | Cod sursa (job #2401646) | Cod sursa (job #1744833)
#include <stdio.h>
using namespace std;
const int LOG_MAX = 18;
const int N_MAX = 250000;
int a[LOG_MAX + 1][N_MAX + 1];
int main()
{
FILE *fin, *fout;
fin = fopen("stramosi.in", "r");
fout = fopen("stramosi.out", "w");
int n, m;
fscanf(fin, "%d%d", &n, &m);
for(int i = 1; i <= n; i++)
{
fscanf(fin, "%d", &a[0][i]);
}
for(int i = 1; i <= LOG_MAX; i++)
for(int j = 1; j <= n; j++)
a[i][j] = a[i - 1][a[i - 1][j]];
for(int i = 1; i <= m; i++)
{
int nod, nivel;
fscanf(fin, "%d%d", &nod, &nivel);
int s = nod, p = LOG_MAX;
while(p >= 0)
{
if(1 << p <= nivel)
{
s = a[p][s];
nivel -= 1 << p;
}
p--;
}
fprintf(fout, "%d\n", s);
}
return 0;
}