Cod sursa(job #2024923)

Utilizator LucaSeriSeritan Luca LucaSeri Data 21 septembrie 2017 16:33:33
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("stramosi.in");
ofstream g("stramosi.out");

const int MaxN = 250100;

int dp[20][MaxN];
int v[MaxN];
int logg[MaxN];

int query(int a, int b){
    for(int log = 19; log >= 0; log --){
        if((1<<log) <= b){
            a = dp[log][a];
            b -= 1<<log;
        }
    }
    return a;
}

int main(){
    int n, m;
    f >> n >> m;

    for(int i = 1; i <= n; ++i){
        f >> v[i];
    }


    for(int i = 1; i <= n; ++i){
        dp[0][i] = v[i];
    }

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

    for(int i = 1; i <= m; ++i){
        int a, b;
        f >> a >> b;
        g << query(a, b) << '\n';
    }

    return 0;
}