Cod sursa(job #1469836)

Utilizator theep0Cruceru Radu theep0 Data 9 august 2015 18:13:30
Problema Stramosi Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 250001

int *stramosi[21];

int N, M, P, Q;

int ans(int q, int p) {
    int i;
    for (i = 20; i >= 0; i--) {
        if ((1 << i) <= p) {
            p -= 1 << i;
            q = stramosi[i][q];
        }
    }
    return q;
}

int main() {
    int i, j, aq, ap;
    FILE *fi = freopen("stramosi.in", "r", stdin);
    FILE *fo = freopen("stramosi.out", "w", stdout);
    scanf("%d %d", &N, &M);
    for (i = 0; i <= 20; i++) {
        stramosi[i] = (int*) malloc(sizeof(int) * (N+1));
    }
    for (i = 1; i <= N; i++) {
        scanf("%d", &j);
        stramosi[0][i] = j;
    }
    for (i = 1; i <= 20; i++) {
        for (j = 1; j <= N; j++) {
            stramosi[i][j] = stramosi[i-1][stramosi[i-1][j]];
        }
    }
    for (i = 0; i < M; i++) {
        scanf("%d %d", &aq, &ap);
        printf("%d\n", ans(aq, ap));
    }
    fclose(fi);
    fclose(fo);
    return 0;
}