Cod sursa(job #79116)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 20 august 2007 21:43:26
Problema Stramosi Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
#include <algorithm>
#include <set>
#include <vector>

using namespace std;

const int n_max = 250001;
const int m_max = 300001;

vector <bool> vaz;
vector <int> v[n_max];
vector <int> big_stiva;
vector <int> stiva;

int p[n_max],o[n_max];
int i, n, m, a, b, t;

void merge_stivas()
{
	vector <int>::iterator it;
	for (it = stiva.begin(); it != stiva.end(); ++ it)
		big_stiva.push_back(*it);
}
void df(int x)
{
	vector <int>::iterator it;
	int t =0;
	stiva.push_back(x);
	p[x] = big_stiva.size()+stiva.size();
	o[x] = stiva.size();
	for (it = v[x].begin(); it != v[x].end(); ++ it)
		df(*it);
	if (v[x].size()==0) 
		merge_stivas();
	stiva.pop_back();
}

int main()
{
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	scanf("%d %d",&n,&m);
	vaz.resize(n+5);

	for (i = 1; i <= n; ++ i)
	{
		scanf("%d",&t);
		v[t].push_back(i);
	}
	
	df(0);
	for (i = 1; i <= m; ++ i)
	{
		scanf("%d %d", &a, &b);
		if (b>o[a]) 
			printf("0\n");
		else
			printf("%d\n", big_stiva[p[a]-b-1]);
	}
}