Pagini recente » Cod sursa (job #2196647) | Istoria paginii runda/usu2 | Cod sursa (job #1004666) | Cod sursa (job #1075330) | Cod sursa (job #41236)
Cod sursa(job #41236)
// 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;
}