Cod sursa(job #1547552)

Utilizator kassay_akosKassay Akos kassay_akos Data 9 decembrie 2015 17:26:51
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <string.h>
//#include <vector>
//#include <queue>
//#include <algorithm>

using namespace std;
const int nmax = 250002;
int n,v[20][nmax];	// ficare linie va fi 2^k-stramos 2^19 > 250.000


void calculate(){
	int i, j;
	for (i = 1; i < 20; i++)
		for (j = 1; j <= n; j++)
			v[i][j] = v[i - 1][v[i - 1][j]];
}

int query(int nod, int putere) {
	int nd = nod;
	for (int i = 0; i < 20; i++)
		if ((putere >> i) & 1)
			nd = v[i][nd];
	return nd;
}

int main(){
	freopen("stramosi.in", "r", stdin);
	freopen("stramosi.out", "w", stdout);
	int m;
	scanf("%d %d", &n, &m);
	v[0][0] = 0;
	for (int i = 1; i <= n; i++)
		scanf("%d", &v[0][i]);
	
	calculate();
	
	int a, b;
	for (; m--;){
		scanf("%d %d", &a, &b);
		printf("%d\n", query(a,b));
	}
		
	fclose(stdin);
	fclose(stdout);
	return 0;
}