Cod sursa(job #1041962)

Utilizator jul123Iulia Duta jul123 Data 26 noiembrie 2013 13:38:38
Problema Stramosi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#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 );
    }
}