Cod sursa(job #1757312)

Utilizator KronSabau Valeriu Kron Data 14 septembrie 2016 20:33:32
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <limits>
#include <stack>
using namespace std;

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

int n,m;
int a[30][250001];

int solve(int x,int y,int k)
{
    int curent,times=0;
    times=1<<k;

    if(times==y)
        return a[k][x];
    x=a[k][x];
    while(times<y && x!=0)
    {
        x=a[0][x];
        times++;
    }
    return x;
}

int main()
{
    int x;
    f >> n >> m;
    for(int i=1;i<=n;i++)
    {
        f >> x;
        a[0][i]=x;
    }
    int y,k=0;
    for(int i=1;(1<<i)<=n;i++)
        for(int j=1;j<=n;j++)
        {
            a[i][j]=a[i-1][a[i-1][j]];
        }

    for(int i=1;i<=m;i++)
    {

        f >> x >> y;
        int aux=y;
        k=0;
        while(aux>1)
        {
            aux=aux>>1;
            k++;
        }

        g << solve(x,y,k) << "\n";


    }

   /* for(int j=0;j<4;j++){
        for(int i=1;i<=n;i++)

           cout << a[j][i] << " ";
       cout << "\n";
    } */

    return 0;
}