Cod sursa(job #977392)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 25 iulie 2013 19:46:39
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <vector>

#include <cstdio>
using namespace std;

const int MAX_N = 250002;

int N, M;
int dp[MAX_N][20], log2[MAX_N];

inline int Query(int x, int k) {
    if(k > N)
        return 0;
    while(k) {
        int t = log2[k];
        x = dp[x][t];
        k -= (1 << t);
    }
    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", &dp[i][0]);

    for(int i = 2; i <= N; ++i)
        log2[i] = log2[i/2] + 1;
    for(int j = 1; (1 << j) <= N; ++j)
        for(int i = 1; i <= N; ++i)
            dp[i][j] = dp[dp[i][j-1]][j-1];

    for(int i = 1, x, k; i <= M; ++i) {
        scanf("%d %d", &x, &k);
        printf("%d\n", Query(x, k));
    }

    return 0;
}