Cod sursa(job #2649532)

Utilizator adiaioanaAdia R. adiaioana Data 15 septembrie 2020 08:58:51
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");

int N, str[250100][20], lim;
inline void rmqish()
{
    for(int exp=1; exp<=lim; ++exp)
        for(int j=1; j<=N; ++j)
            str[j][exp]=str[str[j][exp-1]][exp-1];
}
int main()
{
    int M,x,Q,P;
    cin>>N>>M;
    lim=log2(N);
    for(int i=1; i<=N; ++i) {

        cin>>x;
        str[i][0]=x;
    }
    rmqish();

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

        cin>>Q>>P;
        if(P>N) {

            cout<<0<<'\n';
            continue;
        }

        x=Q;
        for(int j=lim+1; j>=0 && P; --j)
            if((1<<j)<=P) {

                x=str[x][j];
                P-=(1<<j);
            }
        cout<<x<<'\n';
    }

    return 0;
}