Cod sursa(job #1649472)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 11 martie 2016 13:48:32
Problema Stramosi Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <bitset>
#include <stack>
#define nmax 250010
using namespace std;

int n,m1,np;
int pater[nmax][20];

int main()
{
    int nod,i,j,who,nr;
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    scanf("%d%d",&n,&m1);
    for(i=1;i<=n;i++)
        scanf("%d",&pater[i][0]);
    for(i=1;(1<<i)<=n;i++)
        for(j=1;j<=n;j++)
            pater[j][i]=pater [ pater[j][i-1] ] [ i-1 ];

    for(;m1;m1--)
    {
        scanf("%d%d",&who,&nr);
        while(who && nr)
        {
            for(i=1;i<=nr; i<<=1); i>>=1;
            if(i==nr) { printf("%d\n",pater[who][i/2]); who=0; nr=0;}
            if(i<nr) { who=pater[who][i/2]; nr-=i; }
            if(who==0 && nr!=0) { printf("0\n"); break;}
        }
    }

    fclose(stdin);
    fclose(stdout);
    return 0;
}

/* for(i=1;doila(i)<=n;i++)
  {
  for(j=1;j<=n;j++)
    A[i][j]=A[i-1][A[i-1][j]];
  k=i;
  }
 for(k=1;k<=m;++k)
  {
  f>>p>>q;
  while(p && q)
   for(i=k;i>=0;i--)
    if(doila(i)<=q && p && q)
     {
     p=A[i][p];
     q-=doila(i);
     }
  g<<p<<endl;
  }
 return 0;
 }*/