Cod sursa(job #1166539)

Utilizator LarryIulian Dutu Larry Data 3 aprilie 2014 17:35:14
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>

#define NMAX 250005
#define LOGN 20

using namespace std;

int A[LOGN+5][NMAX];
int N,M,T[NMAX];
int P,Q;

void read()
{
    scanf("%d %d\n",&N,&M);

    for (int i=1;i<=N;i++)
        scanf("%d ",&T[i]);
}

void preproc()
{
    for (int i=1;i<=N;i++)
        A[0][i]=T[i];

    for (int i=1;i<=LOGN;i++)
        for (int j=1;j<=N;j++)
                A[i][j]=A[i-1][A[i-1][j]];
}

int query(int gr,int poz)
{
    for (int i=20;i>=0;i--)
        if ((1<<i) & P)
            poz=A[i][poz];

    return poz;
}

void solve()
{
    for (int i=1;i<=M;i++)
    {
        scanf("%d %d\n",&Q,&P);
        printf("%d\n",query(P,Q));
    }
}

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

    read();
    preproc();
    solve();

    fclose(stdin);
    fclose(stdout);

    return 0;
}