Cod sursa(job #2313381)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 6 ianuarie 2019 19:27:08
Problema Stramosi Scor 0
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  q , k , n ; f >> n >> q ;
    int i , j ;
    for ( i = 1 ; i <= n ; ++ i )   f >> rmq [ 0 ][ i ] ;
    for ( k = 1 ; k <= n ; k *= 2  )
    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 -- )
    {
        int nod , nr ;
        f >> nod >> nr ;
        int lg = k ;
        while ( nod && lg -- )  if ( ( 1 << lg ) & nr ) nod = rmq [ lg ][ nod ] ;
        g << nod << "\n" ;
    }
    f.close() ;
    g.close() ;
    return 0 ;
}