Cod sursa(job #1232077)

Utilizator touristGennady Korotkevich tourist Data 21 septembrie 2014 23:20:00
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#include <assert.h>
#include <vector>
#define Nmax 250005

using namespace std;

int tata[Nmax],N,dp[Nmax][20];

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

inline int Stramos(int i, int k)
{
    int p;
    for(p=0;p<20 && k;++p)
        if((1<<p)&k)
        {
            i=dp[i][p];
            k-=(1<<p);
        }
    //assert(i);
    return i;
}

int main()
{
    int y,x,i,M;
    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]);
        dp[i][0]=tata[i];
    }
    RMQ();
    while(M--)
    {
        scanf("%d%d", &x,&y);
        printf("%d\n", Stramos(x,y));
    }
    return 0;
}