Cod sursa(job #1469829)

Utilizator theep0Cruceru Radu theep0 Data 9 august 2015 17:54:00
Problema Stramosi Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 250001

int stramosi[MAXN][20];

int N, M, P, Q, R;

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

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