Cod sursa(job #2313389)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 6 ianuarie 2019 19:47:04
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<bits/stdc++.h>
using namespace std ;
ifstream f ( "stramosi.in" ) ;
ofstream g ( "stramosi.out" ) ;
const int NR = 250001 ;
int rmq [ 20 ][ NR ] ;
// rmq [ i ] [ j ] - al 2^i - lea stramos al lui j
int main ()
{
    int nod , nr , q , k , n , lg ; f >> n >> q ;
    int i , j ;
    for ( i = 1 ; i <= n ; ++ i )   f >> rmq [ 0 ][ i ] ;
    for ( k = 1 ; ( 1 << k ) <= n ; k ++  ) ;
    for ( i = 1  ; ( 1 << i ) <= n ; ++ i )
    for ( j = 1 ; j <= n ; j ++ )
    rmq [ i ][ j ] = rmq [ i - 1 ][ rmq [ i - 1 ][ j ] ] ;
    while ( q -- )
    {
        f >> nod >> nr ;
        lg = k ;
        while ( nod && lg -- )  if ( ( 1 << lg ) & nr ) nod = rmq [ lg ][ nod ] ;
        g << nod << "\n" ;
    }
    f.close() ;
    g.close() ;
    return 0 ;
}