Cod sursa(job #2869509)

Utilizator matei8787Matei Dobrea matei8787 Data 11 martie 2022 16:24:16
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<bits/stdc++.h>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int t[250005][__lg(250005) + 1], n, m, p, q;
int const SZ = 1e6;
int ps = 0;
char buff[SZ];
void next(){
    ++ ps;
    if(ps == SZ){
        ps = 0;
        fread(buff , 1 , SZ , stdin);
    }
}
void _(int &x){
    while(!isdigit(buff[ps]))
        next();
    x = 0;
    while(isdigit(buff[ps])){
        x = x * 10 + (buff[ps] - '0');
        next();
    }
}
void citire()
{
    freopen("stramosi.in" , "r" , stdin);
    fread(buff , 1 , SZ , stdin);
    _(n) , _(m);
    for ( int i = 1 ; i <= n ; i++ )
    {
        _(t[i][0]);
    }
}
void make_restul_t()
{
    for ( int j = 1 ; (1<<j) <= n ; j++ )
    {
        for ( int i = 1 ; i <= n ; i++ )
        {
            t[i][j] = t[t[i][j-1]][j-1];/**<  */
        }
    }
}
void rez()
{
    for ( int i = 1 ; i <= m ; i++ )
    {
        _(p) , _(q);
        int nod = p;
        for ( int j = 0 ; (1<<j) <= q ; j++ )
        {
            if ( (1<<j) & q )
            {
                nod = t[nod][j];
            }
        }
        out<<nod<<'\n';
    }
}
int main()
{
    citire();
    make_restul_t();
    rez();
    return 0;
}