Cod sursa(job #1348412)

Utilizator Miruna_DMiruna Miruna_D Data 19 februarie 2015 18:06:51
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <fstream>
#define Nmax 250001
#define Logmax 21
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n,T[Logmax][Nmax];
int log[Nmax];
void BuildLog()
{
    int i;
    for(i=2;i<=Nmax;i++)
        log[i]=log[i/2]+1;
}

void Stramos()
{
    int i,j;
    for(i=1;i<=log[n];i++)
        for(j=1;j<=n;j++)
        T[i][j]=T[i-1][T[i-1][j]];
}

void FindAncestor(int p,int q)
{
    while(q>0)
    {
        p=T[log[q]][p];
        q=q-(1<<log[q]);
    }
    fout<<p<<"\n";

}
void read()
{
    int m;
    fin>>n>>m;
    int i,p,q;
    for(i=1;i<=n;i++)
        fin>>T[0][i];
    BuildLog();
    Stramos();
    for(i=1;i<=m;i++)
    {
        fin>>p>>q;
        FindAncestor(p,q);
    }
}
int main()
{
   read();
    return 0;
}