Cod sursa(job #2582295)

Utilizator betybety bety bety Data 16 martie 2020 16:13:54
Problema Stramosi Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#pragma GCC optimize ("-O2")
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
const int N=250005;
int p[20][N];
int lg2[N];
int citire()
{
    char ch;
    int nr=0;
    cin.get(ch);
    while(ch!=' ' and ch!='\n')
        nr=nr*10+ch-'0',cin.get(ch);
    return nr;
}
int main()
{
    int n,q;
    n=citire();
    q=citire();
    for(int i=1; i<=n; i++)
        p[0][i]=citire();
    lg2[1]=0;
    for(int i=2; i<N; i++)
        lg2[i]=lg2[i/2]+1;
    for(int log=1; log<20; log++)
    {
        for(int i=1; i<=n; i++)
        {
            p[log][i]=p[log-1][p[log-1][i]];
        }
    }
    for(int i=1; i<=q; i++)
    {
        int poz,rk;
        poz=citire();
        rk=citire();
        while(rk)
        {
            poz=p[lg2[rk]][poz];
            if(poz==0)
                break;
            rk-=(1<<lg2[rk]);
        }
        cout<<poz<<'\n';
    }
    return 0;

}