Cod sursa(job #1585744)

Utilizator georgeliviuPereteanu George georgeliviu Data 31 ianuarie 2016 13:49:37
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <cstdio>

using namespace std;

int n , m , nod , p , q ;
int d[20][250005] ;

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

    scanf("%d %d",&n,&m);
    for ( int i = 1 ; i <= n ; ++i )
    {
        scanf("%d ",&d[0][i]);
    }
    for ( int i = 1 ; i <= 18 ; ++i )
    {
        for ( int j = 1 ; j <= n ; ++j )
        {
            d[i][j] = d[i-1][d[i-1][j]] ;
        }
    }
    for ( int i = 1 ; i <= m ; i++ )
    {
        scanf("%d %d",&q,&p);
        while ( p > 0 )
        {
            int p2 = 1 , i ;
            for (  i = 0 ; p2 * 2 <= p ; i++ ) p2 = p2 * 2 ;
            q = d[i][q] ;
            p = p - p2 ;
        }
        printf("%d\n",q);
    }
    return 0 ;
}