Cod sursa(job #2988159)

Utilizator Cflo306Andrei Cristian-Florentin Cflo306 Data 3 martie 2023 18:22:50
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

int tata[2500001],stramosi[20][250001];

void calculeaza_stramosi(int n){
    int p,stramos0;
    for(int i=1;i<=n;i++){
        stramosi[0][i]=tata[i];
    }
    for(p=1;p<20;p++){
        for(int i=1;i<=n;i++){
            stramos0=stramosi[p-1][i];
            stramosi[p][i]=stramosi[p-1][stramos0];
        }
    }
}

int interogare_stramos(int nod, int k){
    int p=1,e=0;
    while(2*p<=k){
        p*=2;
        e++;
    }
    if(p==k){
        return stramosi[e][nod];
    }
    else return interogare_stramos(stramosi[e][nod],k-p);
}

int main()
{
    int n,m,i,nod,k;
    fin>>n>>m;
    for(int i=1;i<=n;i++){
        fin>>tata[i];
    }
    calculeaza_stramosi(n);
   /* for(int i=0;i<=3;i++){
        for(int j=1;j<=n;j++){
            fout<<stramosi[i][j]<<" ";
        }
        fout<<'\n';
    } */
    for(int i=1;i<=m;i++){
        fin>>nod>>k;
        fout<<interogare_stramos(nod,k)<<'\n';
    }
    return 0;
}