Cod sursa(job #1445872)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 31 mai 2015 12:45:27
Problema Stramosi Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 250001
#define LOGN 18
int mat[LOGN+1][MAXN];
inline int log(int n){
    int x=0;
    while(n>0){
        n/=2;
        x++;
    }
    return x;
}
int main(){
    FILE*fi,*fout;
    int i,j,n,p,nr,q,x,m;
    fi=fopen("stramosi.in" ,"r");
    fout=fopen("stramosi.out" ,"w");
    fscanf(fi,"%d%d" ,&n,&m);
    for(i=1;i<=n;i++)
        fscanf(fi,"%d" ,&mat[0][i]);
    for(i=1;i<log(n);i++)
        for(j=1;j<=n;j++)
            mat[i][j]=mat[i-1][mat[i-1][j]];
    for(i=0;i<m;i++){
        fscanf(fi,"%d%d" ,&q,&p);
        nr=log(p)-1;
        x=q;
        while(p>0){
             if((1<<nr)<=p){
                x=mat[nr][x];
                p-=(1<<nr);
             }
             nr--;
        }
        fprintf(fout,"%d\n" ,x);
    }
    fclose(fi);
    fclose(fout);
    return 0;
}