Cod sursa(job #1012822)

Utilizator hevelebalazshevele balazs hevelebalazs Data 19 octombrie 2013 18:07:03
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#define N 250000
#define LN 20
#define fr(i,a,b) for(int i=a;i<b;++i)
int a[LN][N];
int log[N];
int xp[N];
int query(int x,int y){
    if(!x) return y;
    int l=log[x];
    int m=x-xp[x];
    int p=a[l][y];
    if(!p) return 0;
    return query(m,p);
    }
int main(){
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    int n,m;
    bool c=true;
    scanf("%i%i",&n,&m);
    int x=2,y=0;
    fr(i,0,n+1){
        if(i==x){x*=2;++y;}
        log[i]=y;
        xp[i]=x>>1;
        }
    fr(i,1,n+1) scanf("%i",a[0]+i);
    fr(j,1,LN){
        c=false;
        fr(i,1,n+1){
            a[j][i]=a[j-1][i]?a[j-1][a[j-1][i]]:0;
            if(a[j][i])c=true;
            }
        if(!c)break;
        }
    fr(i,0,m){
        scanf("%i%i",&x,&y);
        printf("%i\n",query(y,x));
        }
    return 0;
    }