Cod sursa(job #41236)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 28 martie 2007 02:36:18
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
// Problema stramosi

#include <stdio.h>
#define MAX         300001

long t[MAX];
long t2[MAX];
long t3[MAX];
long t4[MAX];
long niv[MAX];

int main()
{
    freopen( "stramosi.in" ,"rt", stdin );
             long n, i, m;
             scanf( "%ld %ld", &n, &m );
             niv[0] = -1;
             for( i=1; i<=n; i++ ) scanf( "%ld", &t[i] );             
             for( i=1; i<=n; i++ ) { niv[i] = niv[t[i]]+1; t2[i] = t[t[i]]; t3[i] = t[t2[i]]; t4[i] = t[t3[i]];}
    
    freopen( "stramosi.out" ,"wt", stdout );     
             long p, q;
             while(m > 0)
             {
                     m--;
                     scanf( "%ld %ld", &q, &p );
                     if( p <= niv[q] )
                     while( p>3 )
                            { p-=4; q = t4[q]; }
                     if( p == 3 ) { p=0; q = t3[q]; }
                            else if( p == 2 ) { p=0; q = t2[q]; }
                                 else if ( p==1 ) { p=0; q = t[q]; }
                     if(p) printf("0\n" );
                           else printf( "%ld\n", q );
             }
    fclose( stdin );
    fclose( stdout );
    return 0;
}