Cod sursa(job #2434018)

Utilizator AlexBolfaAlex Bolfa AlexBolfa Data 30 iunie 2019 12:34:54
Problema Stramosi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#define MAX (int)(25e4+5)
#define LOGMAX 20
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

int n,q,dp[LOGMAX][MAX];

void read();
void solve();
int lbs(int&);

int main(){
    read();
    solve();
    return 0;
}
void solve(){
    int a,b,ancestor;
    while(q--){
        fin>>a>>b;
        ancestor=a;

        while(b){
            ancestor=dp[lbs(b)-1][ancestor];
            b-=lbs(b);
        }
        fout<<ancestor<<'\n';
    }
}
void read(){
    int i,j;
    fin>>n>>q;
    for(i=1;i<=n;++i)
        fin>>dp[0][i];
    ///precalculate

    for(i=1;i<LOGMAX;++i){
        for(j=1;j<=n;++j){
            dp[i][j]=dp[i-1][dp[i-1][j]];
        }
    }
}
int lbs(int& x){
    return x&(-x);
}