Cod sursa(job #2087791)

Utilizator Alex18maiAlex Enache Alex18mai Data 14 decembrie 2017 11:55:25
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream cin("stramosi.in");
ofstream cout("stramosi.out");

int dp[250100][20];

int main() {

    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n, m;
    cin >> n >> m;

    for (int i = 1; i <= n; i++) {
        cin >> dp[i][1];
    }

    for (int bit = 2; bit <= int(log2(n)) + 1; bit++) {
        for (int i = 1; i <= n; i++) {
            dp[i][bit] = dp[dp[i][bit - 1]][bit - 1];
        }
    }

    for (int i = 1; i <= m; i++) {
        int nr, pos;
        cin >> nr >> pos;
        for (int bit = int(log2(pos)); bit >= 0; bit--) {
            if ((1 << bit) <= pos) {
                pos -= (1 << bit);
                nr = dp[nr][bit + 1];
            }
        }
        cout << nr << '\n';
    }


    return 0;
}