Cod sursa(job #2553169)

Utilizator horea4Cenan Horea horea4 Data 21 februarie 2020 18:18:41
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
#define DM 250005
using namespace std;
ifstream fi("stramosi.in");
ofstream fo("stramosi.out");
int N,M;
int P[DM];
int DP[40][DM];
int query(int nr,int nod)
{

    int k=30;
    while(nr>0)
    {
        if(nr-(1<<k)>=0)
        {
            nr=nr-(1<<k);
            nod=DP[k][nod];
        }
        k--;
    }
    return nod;


}

int main()
{
    fi>>N>>M;
    for(int i=1;i<=N;i++)
    {
        fi>>P[i];
    }
    for(int i=1;i<=N;i++)
    {
        DP[0][i]=P[i];
    }

    for(int k=1;(1<<k)<=N;k++)
    {   for(int i=1;i<=N;i++)
            DP[k][i]=DP[k-1][ DP[k-1][i] ];
    }
  /* for(int k=0;(1<<k)<=N;k++)
   {
       for(int i=1;i<=N;i++)
          cout<< DP[k][i]<<' ';
       cout<<endl;

   }
  */
    for(int Q=1;Q<=M;Q++)
    {
        int nr,nod;
        fi>>nod>>nr;
        fo<<query(nr,nod)<<'\n';
    }

    return 0;
}