Cod sursa(job #1985446)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 27 mai 2017 22:08:20
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#define MAX 250005
#define NMAX 19

int n, m, x, y;
int p[NMAX][MAX];

void constr(){
    int dist = 2;
    int lvl = 1;

    while(dist <= n){
        for(int i = 1; i <= n; ++i)
            p[lvl][i] = p[lvl - 1][p[lvl - 1][i]];

        dist <<= 1;
        ++lvl;
    }
}

int str(int x, int y){
    int lvl = 0;
    while(y){
        if(y & 1)
            x = p[lvl][x];
        y >>= 1;
        ++lvl;
    }
    return x;
}

int main(){
    freopen("stramosi.in", "r", stdin);
    freopen("stramosi.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; ++i)
        scanf("%d", &p[0][i]);

    constr();

    for(int i = 0; i < m; ++i){
        scanf("%d%d", &x, &y);
        printf("%d\n", str(x, y));
    }
    return 0;
}