Cod sursa(job #3224174)

Utilizator Toni07Stoica Victor Toni07 Data 14 aprilie 2024 21:02:06
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
#define Nmax 250005

using namespace std;

int N,tata[Nmax],dp[Nmax][25],Log2[Nmax+5],put[25];

inline void PreCalcul()
{
    int i;
    put[0]=1;
    for(i=1;i<=20;++i)
        put[i]=put[i-1]*2;
    Log2[1]=0;
    for(i=2;i<=Nmax;++i)
        Log2[i]=Log2[i/2]+1;
}

inline void RMQ()
{
    int i,j;
    for(i=1;i<=N;++i)
        dp[i][0]=tata[i];
    for(i=1;i<=N;++i)
        for(j=1;j<=20;++j)
            dp[i][j]=dp[dp[i][j-1]][j-1];

}

int main()
{
    int M,x,y,i,p;
    freopen ("stramosi.in","r",stdin);
    freopen ("stramosi.out","w",stdout);
    scanf("%d%d", &N,&M);
    for(i=1;i<=N;++i)
        scanf("%d", &tata[i]);
    PreCalcul();
    RMQ();

    while(M--)
    {
        scanf("%d%d", &x,&y);
        while(y>0)
        {
            p=Log2[y];
            x=dp[x][p];
            y-=put[p];
        }
        printf("%d\n", x);
    }
    return 0;
}