Cod sursa(job #3212597)

Utilizator erixEric stoicescu erix Data 11 martie 2024 22:23:39
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>
#include <stack>
#include <set>

using namespace std;
#define int long long
#define watch(x) cerr << "\n" << (#x) << " is " << (x) << endl
#define all(x) x.begin(), x.end()

const string taskname("stramosi");
ifstream cin(taskname + ".in");
ofstream cout(taskname + ".out");
const int MAX_N = 250004;
const int MAX_N_LOG_2 = 18;
int n, Q;
int arb[MAX_N_LOG_2][MAX_N];

int32_t main() {
	cin >> n >> Q;

	for (int i = 0; i < n; i++) {
		int x;
		cin >> x;
		x--;
		arb[0][i] = x;
	}
	for (int i = 1; i < MAX_N_LOG_2; i++) {
		for (int j = 0; j < n; j++) {
			int anc = arb[i - 1][j];
			if (anc == -1) arb[i][j] = -1;
			else {
				arb[i][j] = arb[i - 1][anc];
			}
		}
	}
	int q,p = 0;
	for (int i = 0; i < Q; i++) {
		cin >> q >> p;
		q--;
		for (int j = 0; p && q != -1; j++, p >>= 1) {
			if (p & 1) {
				q = arb[j][q];
			}
		}
		cout << (q + 1) << '\n';
	}
}