Pagini recente » Cod sursa (job #2091765) | Cod sursa (job #1205015) | Cod sursa (job #744061) | Cod sursa (job #295911) | Cod sursa (job #1041962)
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
vector<int>t[260000];
int v[260000], m, n;
int log2(int x)
{
int aux=1, nr=0;
while(aux <= x)
{
aux = aux << 1;
nr++;
}
return nr - 1;
}
int main()
{
FILE *fin, *fout;
fin = fopen( "stramosi.in" , "r" );
fout=fopen( "stramosi.out" , "w" );
int i, j, aux, lg, x, y;
fscanf( fin, "%d %d", &n, &m );
for( i=1; i<=n; i++ )
fscanf( fin, "%d", &v[i] );
for( i = 1; i <= n; i++ )
t[i].push_back( v[i] );
lg = log2( n );
for( j=1; j<=n; j++ )
t[0].push_back( 0 );
j = 1;
while( j <= lg+1 )
{
for( i = 1 ; i <=n ; i++ )
t[i].push_back( t[t[i][j - 1]][j - 1] );
j++;
}
for(i=1; i<=n; i++)
{
for(j=0; j<t[i].size(); j++)
cout<<t[i][j]<<" ";
cout<<"\n";
}
for( i = 1; i <= m; i++ )
{
fscanf( fin, "%d %d", &x, &y );
while( y )
{j = log2( y );
y -= ( 1<<j );
x = t[x][j];
}
fprintf( fout, "%d\n", x );
}
}