Cod sursa(job #2397627)

Utilizator DenisacheDenis Ehorovici Denisache Data 4 aprilie 2019 17:17:27
Problema Stramosi Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;

int D[250005][18];

int log(int n) {
    int res = 0;
    
    while (n) {
        ++res;
        n >>= 1;
    }
    
    return res;
}

int main() {
    freopen("stramosi.in", "r", stdin);
    freopen("stramosi.out", "w", stdout);
    
    int n, q;
    scanf("%d %d", &n, &q);
    
    for (int i = 1; i <= n; ++i) {
        scanf("%d", &D[i][0]);
    }
    
    int logN = log(n);
    
    for (int j = 1; j < logN; ++j) {
        for (int i = 1; i <= n; ++i) {
            D[i][j] = D[D[i][j-1]][j-1];
        }
    }
    
    while (q--) {
        int x, p;
        scanf("%d %d", &x, &p);
        
        int pwr = 0;
        while (p && x) {
            if (p & 1) {
                x = D[x][pwr];
            }
            
            ++pwr;
            p >>= 1;
        }
        
        printf("%d\n", x);
    }
    
    return 0;
}