Cod sursa(job #174742)

Utilizator Mishu91Andrei Misarca Mishu91 Data 9 aprilie 2008 10:51:28
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>  
#define N 250002  
#define K 20  
int n,m,p,q,rez;  
int mat[N][K],str[N];  
void scan()  
{  
    freopen("stramosi.in","r",stdin);  
    freopen("stramosi.out","w",stdout);  
    scanf("%d %d\n",&n,&m);  
    scanf("%d", &mat[1][0]);  
    for (int i=2;i<=n;i++)  
    {  
        str[i]=str[i/2]+1;  
        scanf("%d", &mat[i][0]);  
    }  
}  
void make()  
{     
    for (int i=1;i<=n;i++)  
        for (int j=1;j<=str[n];j++)  
        {  
            if (!mat[ mat[i][j-1] ][j-1])  
                    break;  
            mat[i][j]=mat[ mat[i][j-1] ][j-1];  
        }  
}  
void solve()  
{     
    for (int i=0;i<m;i++)  
    {  
        scanf("%d %d\n",&q,&p);  
        while (p)  
        {  
            rez=mat[q][str[p]];  
            p-=(1<<str[p]);  
            q=rez;                                    
        }  
    printf("%d\n", rez);  
    }  
}  
int main()  
{  
    scan();  
    make();  
    solve();  
    return 0;  
}