Cod sursa(job #1146833)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 19 martie 2014 12:28:42
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<cstdio>
const int LOG_MAX_N=20,MAX_N=250000;
int d[LOG_MAX_N+1][MAX_N];
int n,m;
void scan(){
    int i;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        scanf("%d",&d[0][i]);
}
void setD(){
    int i,j;
    for(i=1;1<<i<=n;i++)
        for(j=1;j<=n;j++)
            d[i][j]=d[i-1][d[i-1][j]];
}
void init(){
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    scan();
    setD();
}
int querry(int p,int q){
    int pas=1<<LOG_MAX_N,power=LOG_MAX_N;
    while(pas>0){
        if(pas<=p){
            p-=pas;
            q=d[power][q];
        }
        pas/=2;
        power--;
    }
    return q;
}
int main(){
    int p,q;
    init();
    while(m>0){
        m--;
        scanf("%d%d",&q,&p);
        printf("%d\n",querry(p,q));
    }
    return 0;
}