Cod sursa(job #2339667)

Utilizator HoratioHoratiu Duma Horatio Data 9 februarie 2019 11:02:11
Problema Stramosi Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>

using namespace std;

int n,m;

int P[250000][20];


void citire()
{
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&P[i][0]);
    }
}


void DP()
{
    for(int i=1;i<20;i++)
    {
        for(int k=1;k<=n;k++)
            P[k][i]=P[P[k][i-1]][i-1];
    }
}

int sol(int x,int g)
{
    int t=x;
    int p=1;
    int cnt=0;
    while(p<=g)
    {
        if(g&p)
            t=P[t][cnt];
        p<<=1;
        cnt++;
    }
    return t;
}

int main()
{

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

    for(int i=0;i<m;i++)
    {
        int a,b;
        scanf("%d %d",&a,&b);
        printf("%d\n",sol(a,b));
    }

    return 0;
}