Cod sursa(job #2469182)

Utilizator roberttrutaTruta Robert roberttruta Data 6 octombrie 2019 16:28:08
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,m,i,j,x,y,k,afis,s,v[32][250005],pw[32],lg[250005];
char c[20];
int cit()
{
    int r,z=0,t;
    f>>c;
    t=strlen(c);
    for(r=0;r<t;r++)
    {
        z=z*10+c[r]-48;
    }
    return z;
}
int main()
{
    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++)
    {
        x=cit();
        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++)
    {
        x=cit(); y=cit();
        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;
}