Cod sursa(job #2909140)

Utilizator NFJJuniorIancu Ivasciuc NFJJunior Data 9 iunie 2022 16:45:30
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
#define cin f
#define cout g
const int Max = 25e4 + 1;

int n, m, log2n, arr[Max], father[Max][20];
int main()
{
	cin >> n >> m;
	log2n = floor(log(n) / log(2));
	for(int i = 1; i <= n; i ++)
		cin >> arr[i];
	for(int i = 1; i <= log2n; i ++)
		father[1][i] = 0;
	for(int i = 1; i <= n; i ++)
		father[i][0] = arr[i];
	for(int i = 1; i <= log2n; i ++)
		for(int j = 1; j <= n; j ++)
			father[j][i] = father[father[j][i - 1]][i - 1];
	for(int i = 1; i <= m; i ++)
	{
		int q, p, putere = (1 << log2n);
		cin >> q >> p;
		for(int i = log2n; i >= 0; i --)
		{
			if(putere <= p)
			{
				p -= putere;
				q = father[q][i];
			}
			if(p == 0)
				break;
			if(q == 0)
				break;
			putere >>= 1;
		}
		cout<<q<<'\n';
	}
	return 0;
}