Cod sursa(job #2469124)

Utilizator roberttrutaTruta Robert roberttruta Data 6 octombrie 2019 15:35:51
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>

using namespace std;
int n,m,i,j,x,y,k,afis,s,v[32][250005],pw[32],lg[250005];
int main()
{
    ifstream f("stramosi.in");
    ofstream g("stramosi.out");

    f>>n>>m;
    pw[0]=1;
    for(i=1;i<=30;i++)
    pw[i]=pw[i-1]*2;
    k=0;
    for(i=1;i<=n;i++)
    if(pw[k]==i)
    {
        lg[i]=k;
        k++;
    }
    else
        lg[i]=k-1;

    for(i=1;i<=n;i++)
    {
        f>>x;
        v[0][i]=x;
    }
    for(i=1;i<=n;i++)
    for(j=1;j<=lg[n];j++)
    {
    v[j][i]=v[j-1][v[j-1][i]];
    if(v[j][i]==0)
    break ;
    }

   for(i=1;i<=m;i++)
    {
        f>>x>>y;
        s=0;
        while(s!=y)
        {
            k=lg[y-s];
            s+=pw[k];
            afis=v[k][x];
            if(afis==0)
            break ;
            x=afis;
        }
        g<<afis<<'\n';
    }


    return 0;
}