Cod sursa(job #1329210)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 29 ianuarie 2015 11:01:02
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#include <fstream>
#include <cstring>
#define nmax 250005
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,m;
int t[nmax][20];
int masca;
char s[2000000];

int build(int i,int j)
{
    if (i<0||j<0) return 0;

    if (t[i][j]!=-1)
            return t[i][j];

    return build(t[i][j-1],j-1);

}
int query(int i,int j)
{


    while (masca>=1&&( (1<<masca) &j)==0) masca--;
    if (j==(1<<masca)) return t[i][masca];

    return query(t[i][masca],j-(1<<masca));
}

int main()
{
    int i,j,a,b;
    f>>n>>m;f.get();
    f.getline(s,2000000);
    i=1;
    for (j=0;s[j]!=NULL;++j){
            if (s[j]==' ') i++;
                    else t[i][0]=t[i][0]*10+s[j]-'0';
    }

    for (i=1;i<=n;i++)
        for(j=1;(1<<j)<=n;j++)
                t[i][j]=-1;


    for (j=1;(1<<j)<=n;j++)
        for (i=1;i<=n;i++)

            t[i][j]=build(i,j);

    for (m;m>=1;m--) {
                f>>a>>b;

                masca=20;
                g<<query(a,b)<<'\n';
    }
    return 0;
}