Cod sursa(job #2975538)

Utilizator AndreiBadAndrei Badulescu AndreiBad Data 6 februarie 2023 18:50:48
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
//
//  main.cpp
//  Stramosi
//
//  Created by Andrei Bădulescu on 03.02.23.
//

//#include <iostream>
#include <fstream>

using namespace std;

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

const int N = 250000;

int predecessor[N + 1][20];
int n, m;

int main() {
    cin >> n;
    cin >> m;

    for (auto i = 1; i <= n; i++) {
        cin >> predecessor[i][0];
    }

    // PRECALCULARE

    int copyN = n / 2;

    for (auto power = 1; copyN >= 1; power++) {
        for (auto i = 1; i <= n; i++) {
            predecessor[i][power] = predecessor[predecessor[i][power - 1]][power - 1];
        }

        copyN /= 2;
    }

    // PRECALCULARE

    for (auto i = 1; i <= m; i++) {
        int index, query;
        cin >> index >> query;

        int j = 18;
        int current = 0;

        while (current < query) {
            if ((1 << j) + current <= query) {
                index = predecessor[index][j];
                current += (1 << j);
            }

            j--;
        }

        cout << index << ' ';
    }

    return 0;
}