Cod sursa(job #2339699)

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

using namespace std;

int n,m;

int P[20][25000];

int Pars()
{
    int c='0';
    int d=0;
    while(c<='9' && c>='0')
    {
       scanf("%c",&c);
       d=d*10+(c-'0');
    }
    d-=(c-'0');
    d/=10;

    return d;
}


void citire()
{
    n=Pars();
    m=Pars();
    for(int i=1;i<=n;i++)
    {
        P[0][i]=Pars();
    }
}


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;
}