Cod sursa(job #2339747)

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

using namespace std;

int n,m;

int P[20][250050];



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


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

int sol(int x,int g)
{
    int t=x;
    int p=1;
    int cnt=0;
    while(p<=g)
    {
        if(g&p)
            t=P[cnt][t];
        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;
}