Cod sursa(job #1588329)

Utilizator RadduFMI Dinu Radu Raddu Data 2 februarie 2016 23:01:57
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,q,dad[250005][20],lg[250005];
int Solve(int x,int k)
{ int i;

 while(k)
 { x=dad[x][lg[k]];
   k-=(1<<(lg[k]));
 }
return x;
}

void Build()
{ int i,p;
   for(p=1;p<=19;p++)
    for(i=1;i<=n;i++)
      dad[i][p]=dad[dad[i][p-1]][p-1];
}

int main()
{ int i,x,y;
    f>>n>>q;
    for(i=1;i<=n;i++)
     { f>>x;
       dad[i][0]=x;
     }

    Build();

  for(i=2;i<=n;i++)
   lg[i]=lg[i/2]+1;

    for(i=1;i<=q;i++)
    { f>>x>>y;
       g<<Solve(x,y)<<"\n";
    }
    return 0;
}