Pagini recente » Cod sursa (job #819452) | Cod sursa (job #450219) | Cod sursa (job #635622) | Cod sursa (job #1360810) | Cod sursa (job #1218212)
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define IN "prim.in"
#define OUT "prim.out"
#define ERR 1
int main()
{
FILE *in = fopen(IN, "rt");
FILE *out = fopen(OUT, "wt");
//if(!in || !out) return ERR;
int n,ln,m,i,j,**mat,p,q;
fscanf(in, "%d %d", &n, &m);
ln = ((int) log((double)n)/log(2)) + 1;
printf("n=%d\nln=%d\nm=%d\n", n, ln, m);
mat = (int**)malloc(ln*sizeof(int*));
//if(!mat) return ERR;
for(i=0; i < ln; i++){
mat[i] = (int*)calloc(n,sizeof(int));
//if(!mat[i]) return ERR;
}
for(i = 1; i <= n; i++){
fscanf(in, "%d", &j);
mat[0][i] = j;
}
for(i = 1; i < ln; i++){
for(j = 1; j <= n; j++)
mat[i][j] = mat[i-1][mat[i-1][j]];
}
for(i = 1; i <= m; i++){
fscanf(in, "%d %d", &q, &p);
j = 0;
while(p){
if(p & 1){
q = mat[j][q];
}
p = p>>1;
j++;
}
fprintf(out, "%d\n", q);
}
for(i=0; i < ln; i++){
free(mat[i]);
}
free(mat);
fclose(in);
fclose(out);
return 0;
}