Cod sursa(job #398432)

Utilizator csizMocanu Calin csiz Data 18 februarie 2010 17:58:12
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <vector>
#include  <iostream>

using namespace std;

int main(){
    int n,m;
    ifstream in("stramosi.in");
    ofstream out("stramosi.out");

    in>>n>>m;
    vector<vector<int> > v(21,vector<int>(n+1,0));
    for(int i=0;i<n;i++) in>>v[0][i+1];
    for(int k=1;k<21;k++){
        for(int i=1;i<=n;i++){
            v[k][i]=v[k-1][v[k-1][i]];
        }
    }

    for(int i=0;i<m;i++){
        int p,q;
        in>>q>>p;
        //al p lea stramos a lui q

        int putere=1;int numar=0;
        while(putere<=p){
            putere*=2;
            numar++;
        }
        putere/=2;numar--;
        while(putere>=0 and p){
            q=v[numar][q];
            p-=putere;
            while(putere>p){
                putere/=2;
                numar--;
            }
        }
        out<<q<<"\n";
    }
}