Cod sursa(job #1104072)

Utilizator classiusCobuz Andrei classius Data 10 februarie 2014 13:55:38
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
//#include <iostream>
#include <fstream>
#include<algorithm>
#include<cmath>

using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");

int i,j,k,v[250001],a[250001][20],n,m,top;

pair <int,int> c[300001];


int pow(int a, int b){
    int x=1;
    while(b--){
        x*=a;
    }
    return x;
}

int main()
{
    cin>>n>>m;

    for(i=1;i<=n;i++){
        cin>>v[i];
    }
    for(j=1;j<=m;j++){
        cin>>c[j].first>>c[j].second;
    }

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

    for(j=1;j<=19;j++){
        for(i=1;i<=n;i++){
            if(a[a[i][j-1]][j-1]==0){
                continue;
            }
            a[i][j]=a[a[i][j-1]][j-1];
        }
    }


    for(j=1;j<=m;j++){
        top=c[j].first;
        while(c[j].second>0){
            for(k=0;pow(2,k)<=c[j].second;k++){
            }
            top=a[top][k-1];
            c[j].second-=pow(2,k-1);
        }
        cout<<top<<'\n';
    }

    return 0;
}