Cod sursa(job #1150215)

Utilizator laurentiudLaurentiu Diaconu laurentiud Data 22 martie 2014 17:51:02
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
using namespace std;
#define maxN 250005
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int n,m,p,q;
int direct_ancestors[maxN];
int ancestors_matrix[21][maxN];
void reading()
{
    in>>n>>m;
    int i;
    for(i=1;i<=n;++i)
        in>>direct_ancestors[i];
}
void generate_ancestors()
{
    int i,j;
    for(j=1;j<=n;++j)
        ancestors_matrix[0][j]=direct_ancestors[j];
    for(i=1;i<=20;++i)
        for(j=1;j<=n;++j)
            ancestors_matrix[i][j]=ancestors_matrix[i-1][ancestors_matrix[i-1][j]];
}
int find_the_ancestor(int grade, int member)
{
    int k;
    for(k=20;k>=0;k--)
        if((1<<k)&p) member=ancestors_matrix[k][member];
    return member;
}
void find_ancestors()
{
    int i;
    for(i=1;i<=m;++i)
    {
        in>>q>>p;
        out<<find_the_ancestor(p,q)<<'\n';
    }
}
int main()
{
    reading();
    generate_ancestors();
    find_ancestors();
    in.close();
    out.close();
    return 0;
}