Cod sursa(job #2359980)

Utilizator BotzkiBotzki Botzki Data 1 martie 2019 11:13:05
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>

using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int NMAX=250000;
const int logmax=20;
int str2put[NMAX+5][logmax+5];
///pt fiecare nod precalculam care este al 2^k lea stramos
///str2put[i][k]-al 2^k lea stramos al lui i
///str2put[i][k]=str2put[str2put[i][k-1]][k-1];
///str2put[i][0]=tata[i];
int main()
{
    int n, m, sol, i, j, exp, put2, q, p;
    fin>>n>>m;
    for(i=1;i<=n;i++)
      fin>>str2put[i][0];
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=20;j++)
        {
            if(str2put[i][j-1]!=0 and (1<<j)<=n)
                str2put[i][j]=str2put[str2put[i][j-1]][j-1];
        }
    }
    for(i=1;i<=m;i++)
    {
        fin>>q>>p;
        put2=1;
        exp=0;
        while(put2<=p)
        {
            if(put2&p)
                q=str2put[q][exp];
            put2=put2*2;
            exp++;
        }
        fout<<q<<"\n";
    }
    return 0;
}