Cod sursa(job #1167531)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 5 aprilie 2014 14:04:32
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
#include<bitset>
using namespace std;

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

int n,m,dp[250005][21];
short logaritm[250005];

inline int putere(int x)
{
    if (x==0) return 1;
    else return 2*putere(x-1);
}

inline void Citire()
{
    int i,j;
    fin>>n>>m;
    for (i=1;i<=n;i++)
        fin>>dp[i][0];
    for (i=2;i<=n;i++)
        logaritm[i]=logaritm[i/2]+1;
    for (i=1;i<=n;i++)
        for (j=1;j<=20;j++)
            dp[i][j]=dp[dp[i][j-1]][j-1];
}

inline void DP()
{
    int i,Q,p,aux,tata;
    for (i=1;i<=m;i++)
        {
           fin>>Q>>p;tata=0;
           while (p)
                {
                    aux=logaritm[p];
                    p=p-putere(aux);
                    if (dp[Q][aux]==0)
                        p=0;
                    else
                        {
                            tata=dp[Q][aux];
                            Q=tata;
                        }
                }
            fout<<tata<<"\n";
        }
}

int main()
{
    Citire();
    DP();
    return 0;
}