Cod sursa(job #2632657)

Utilizator xCata02Catalin Brita xCata02 Data 4 iulie 2020 12:13:04
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

#define cin  fin
#define cout fout


 
#define endl "\n"
#define ll long long
 
int n, m;

	
int rmq[18][250010];
int logaritmi[250010];
 
void init() {
    logaritmi[1] = 0;
    for(int i=2; i <= n; i++) {
        logaritmi[i] = logaritmi[i / 2] + 1;
    }
 
    for(int lungime = 1; (1 << lungime) <= n; lungime++) {
        for(int el = 1; el <= n; el++) {
            rmq[lungime][el] = rmq[lungime-1][rmq[lungime-1][el]];
        }
    }
}

 
void solve() {
	cin >> n >> m;
	for(int i=1; i <= n; i++) {
		cin >> rmq[0][i];
	}
	init();
	
	while(m--) {
		int a, b;
		cin >> a >> b;
		if(b == 0) {
			cout << a << endl;
		} else {
			while(b > 0) {
				a = rmq[logaritmi[b & (-b)]][a];
				b -= b & (-b);
			}
			
			cout << a << endl;
		}
	}
}
 
 
int main() {
	ios_base::sync_with_stdio(0);
	cin .tie(0);
	cout.tie(0);
	
	int testCases = 1;
	//cin >> testCases;
	while(testCases--) {
		solve();
	}
}