Cod sursa(job #2977230)

Utilizator raileanu-alin-gabrielRaileanu Alin-Gabriel raileanu-alin-gabriel Data 11 februarie 2023 09:46:26
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
#include <cmath>
const int NMAX=250005;
const int LGMAX=32;

using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

int dp[LGMAX][NMAX];
int p[NMAX];
int n, q;

void build();
int urca(int, int);

int main()
{
    int i, a, b;
    fin>>n>>q;
    for(i=1; i<=n; i++) fin>>dp[0][i];
    build();
    while(q--)
    {
        fin>>a>>b;
        fout<<urca(a, b)<<'\n';
    }
    return 0;
}

int urca(int nod, int pt)
{
    if(pt==0) return nod;
    return urca(dp[p[pt]][nod], pt-(1<<p[pt]));
}

void build()
{
    int i, j, pt=0;
    for(i=1; i<=n; i++)
    {
        if((1<<(pt+1))==i) pt++;
        p[i]=pt;
    }
    for(i=1; (1<<i)<=n; i++)
    {
        for(j=1; j<=n; j++) dp[i][j]=dp[i-1][dp[i-1][j]];
    }
}