Cod sursa(job #1041678)

Utilizator dan.ghitaDan Ghita dan.ghita Data 25 noiembrie 2013 23:42:02
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int p, n, x, v[250003], m, e, s[1000][250003], lvl[250003];
int main()
{
f>>n>>m;
for(int i=1; i<=n; ++i)
    f>>v[i], lvl[i]=lvl[v[i]]+1;//,cout<<lvl[i]<<' ';cout<<'\n';
for(int i=1; i<=n; ++i){
    x=i;
    s[0][x]=v[i];
    for(p=1; (1<<p)<=lvl[i]; p++){
        s[p][i]=s[p-1][s[p-1][i]];
    }
}

//for(int i=1; i<=n; ++i){
//    for(int j=0; j<20; ++j)
//        cout<<s[j][i]<<' ';
//    cout<<'\n';
//}


while(m--){
f>>x>>p;
e=16;
while(p){
    if((1<<e)<=p){
    x=s[e][x];
    p-=(1<<e);
//    cout<<(1<<e)<<'\n';
    }
    e--;
}
g<<x<<'\n';


}

    return 0;
}