Cod sursa(job #1588340)

Utilizator RadduFMI Dinu Radu Raddu Data 2 februarie 2016 23:11:08
Problema Stramosi Scor 0
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[lg[k]][x];
   k-=(1<<(lg[k]));
 }
return x;
}

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

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



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

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