Cod sursa(job #1498018)

Utilizator CollermanAndrei Amariei Collerman Data 7 octombrie 2015 21:23:18
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <iostream>
#include <fstream>

using namespace std;

int v[19][250005]; //v[i][j] = al 2^i-lea stramos al lui j

int str(int q, int p)
{
    for(int i = 20; i > -1; --i)
        if(p & (1 << i))
            q = v[i][q];
    return q;
}

int main()
{
    int N, M, Q, P, i;

    freopen("stramosi.in", "r", stdin);
    scanf("%d%d", &N, &M);
    for(i = 1; i <= N; ++i)
        scanf("%d", &v[0][i]);
    int p = 0, put = 1;
    while (put <= N)
    {
        put = put * 2;
        ++ p;
    }
    --p;
    for(int j = 1; j <= p; ++j)
        for(i = 1; i <= N; ++i)
            v[j][i] = v[j-1][v[j-1][i]];
    freopen("stramosi.out", "w", stdout);
    for(i = 0; i < M; ++i)
    {
        scanf("%d%d", &Q, &P);
        printf("%d\n", str(Q,P));
    }

    return 0;
}