Cod sursa(job #2700481)

Utilizator TheGodFather2131Alexandru Miclea TheGodFather2131 Data 27 ianuarie 2021 20:50:28
Problema Stramosi Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
//ALEXANDRU MICLEA

#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <cstring>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
#include <chrono>
#include <assert.h>
#include <iostream>

using namespace std;
using ll = long long;

#define fast_cin() 	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)

//VARIABLES

int LOG[250005];
int dp[25][250005];

//FUNCTIONS



//MAIN
int main() {

	#ifdef INFOARENA
		freopen("stramosi.in", "r", stdin);
		freopen("stramosi.out", "w", stdout);
	#endif

	fast_cin();

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

	for (int i = 2; i <= n; i++) LOG[i] = LOG[i / 2] + 1;

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

	for (int p = 1; p < LOG[n]; p++) {
		for (int i = 1; i <= n; i++) {
			dp[p][i] = dp[p - 1][dp[p - 1][i]];
		}
	}

	for (int i = 1; i <= m; i++) {
		int nod, rang; cin >> nod >> rang;

		while (rang) {
			nod = dp[LOG[rang]][nod];
			rang -= (1 << LOG[rang]);
		}

		cout << nod << '\n';
	}
	return 0;
}