Cod sursa(job #2434019)

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

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

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

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

        while(b){
            ancestor=dp[lsb(b)-1][ancestor];
            b-=lsb(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 lsb(int& x){
    return x&(-x);
}