Cod sursa(job #1845992)

Utilizator razvan99hHorhat Razvan razvan99h Data 12 ianuarie 2017 00:34:17
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, m, i, v[250005], Q, P, dad[20][250005];

void build_stramosi()
{
    for(int i=1;i<=n;i++)
        dad[0][i]=v[i];
    for(int k=1;k<=18;k++)
        for(int i=1;i<=n;i++)
            dad[k][i]=dad[k-1][dad[k-1][i]];
}
int stramos(int Q, int P)
{
    int aux=Q, i;
    for(i=0;(1<<i)<=P;i++)
        if(P & (1<<i))
            aux=dad[i][aux];
    return aux;
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
        fin>>v[i];
    build_stramosi();

    /*for(int k=0;k<=10;k++)
        {for(int i=1;i<=n;i++)
            cout<<dad[k][i]<<' ';
        cout<<endl;}*/

    for(i=1;i<=m;i++)
    {
        fin>>Q>>P;
        fout<<stramos(Q,P)<<'\n';
    }
    return 0;
}