Cod sursa(job #1715677)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 11 iunie 2016 12:47:35
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
vector <int>v[250005];
int x,y,n,m,i,j,s[250005],d[250005],k,x1,r,k1,ct,i1;
int main()
{fin>>n>>m;

 for(i=1;i<=n;i++)
     {fin>>s[i];
      d[i]=d[s[i]]+1;
      k=2;v[i].push_back(i);
      v[i].push_back(s[i]);
      i1=s[i];
      ct=1;
      while(k<=d[i]-1)
          {ct++;
           v[i].push_back(v[i1][ct-1]);
           k=k*2;
           i1=v[i1][ct-1];
          }
    }

 for(j=1;j<=m;j++)
    {fin>>x>>y;
     x1=x+y;
     r=x;
     if(y>d[x]-1)fout<<"0\n";
     else{
     while(x<x1)
          {k1=x1-x;
           k=1;
           ct=1;
           while(k<=k1)
                {k=k*2;
                 ct++;
                }
                ct--;
           k=k/2;
           r=v[r][ct];
           x=x+k;
          }
     fout<<r<<"\n";
         }
    }

}