Cod sursa(job #675355)

Utilizator elfusFlorin Chirica elfus Data 7 februarie 2012 16:07:27
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <stdio.h>
#define NMAX 250100
#define LOGNMAX 18

int dp[LOGNMAX][NMAX];

int main ()
{
    int i, N, Q, node, step, j, lastNode;

    freopen ("stramosi.in", "r", stdin);
    freopen ("stramosi.out", "w", stdout);

    scanf ("%d%d", &N, &Q);
    for (i = 1; i <= N; i ++)
        scanf ("%d", &dp[0][i]);

    for (i = 1; (1 << i) <= N; i ++)
        for (j = 1; j <= N; j ++)
        {
            lastNode = dp[i - 1][j];
            dp[i][j] = dp[i - 1][lastNode];
        }

    while (Q --)
    {
        scanf ("%d%d", &node, &step);
        for (i = 0; (1 << i) <= step && node; i ++)
            if (step & (1 << i))
                node = dp[i][node];
        printf ("%d\n", node);
    }

    return 0;
}