Cod sursa(job #811570)

Utilizator batistaUPB-Oprea-Cosmin-Dumitru batista Data 12 noiembrie 2012 17:48:25
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<fstream>
using namespace std;
int a[19][250001],lg[250001];
int n,m,i,l,p,q,nod,ord;
int stramos(int nod,int ord)
{
    if(nod==0)return 0;
    if(ord==0)return nod;
    nod=a[lg[ord]][nod];
    ord-=1<<lg[ord];
    return stramos(nod,ord);
}
int main()//18=log(2,2500000),se cere stramosul de ordin ord al lui nod
{
   ifstream f("stramosi.in");ofstream g("stramosi.out");
    f>>n>>m;
    for(i=1;i<=n;++i)
        f>>a[0][i];
    for(l=1;l<=18;l++)//lucreaza fix ca skip listurile,a[l][i] <- stramosul de ordin 2^l al lui i
     for(i=1;i<=n;i++)
      a[l][i]=a[l-1][ a[l-1][i] ];
    for(i=2;i<=n;i++)lg[i]=lg[i/2]+1;
    for(i=1;i<=m;i++)
    {
        f>>nod>>ord;
        g<<stramos(nod,ord)<<'\n';
    }
    f.close();g.close();
    return 0;
}