Cod sursa(job #1954539)

Utilizator RaZxKiDDavid Razvan RaZxKiD Data 5 aprilie 2017 14:49:11
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int LOG2[250005];
int STR[250005][22];

int n,q;

void read(){
    in>>n>>q;
    for(int i=1;i<=n;i++){
        in>>STR[i][0];
    }
}
void logs(){
    for(int i=2;i<=n;i++){
        LOG2[i]=LOG2[i/2]+1;
    }
}
void prep(){
    logs();
    for(int i=1;i<=n;i++){
        for(int j=1;(1<<j)<=n;j++){
            STR[i][j]=STR[STR[i][j-1]][j-1];
            //! stramosul de gradul 2^j al lui i este stramosul de gradul 2^(j-1) al stramosului de gradul 2^(j-1) a lui i
        }
    }
}
void queries(){
    int x,l,str;
    for(int i=1;i<=q;i++){
        in>>str>>x;
        while(x!=0){
            l=LOG2[x];
            x-=(1<<l);
            str=STR[str][l];
        }
        out<<str<<"\n";
    }
}
int main(){
    read();
    prep();
    queries();
    return 0;
}