Cod sursa(job #1900901)

Utilizator CodrutLemeniCodrut Lemeni CodrutLemeni Data 3 martie 2017 17:20:28
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <vector>

using namespace std;


const int N = 250010 ;
const int LOGN = 18 ;
int dp [ LOGN ][ N ];

int main(){
    int n , i ,q ;
    int a , b , j ;

    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);

    scanf("%d",&n);
    scanf("%d",&q);

    for ( i = 1 ; i <= n ; i ++ ){
        scanf("%d",&dp  [ 0 ][ i ] ) ;
    }

    for ( i = 1 ; i <= n ; i++ ){
        for ( j = 1 ; (1<<j ) <= n ; j++ ){
            dp [ j ] [ i ] = dp [ j - 1 ][ dp [ j -1 ][ i ]   ];
        }
    }

    for ( i = 0 ; i < q ; i ++ ){
        scanf("%d%d",&a,&b);

        for ( j = 0 ; ( 1<<j ) <=n ; j++ ){
            if ( b & ( 1<<j ) ){
                b -= 1<<j;
                a = dp [ j ] [ a ];
            }
        }
        printf("%d\n",a);
    }

    return 0;
}