Cod sursa(job #35084)

Utilizator ionel71089lescai ionel ionel71089 Data 21 martie 2007 20:12:57
Problema Stramosi Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<fstream.h>
#define SIZE 100
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int p[250001],a[SIZE][SIZE],min[SIZE],max[SIZE],n,m;
void citire()
	{
	f>>n>>m;
	int i;
	for(i=1;i<=n;i++)
		{
		f>>p[i];
		if(i<SIZE)min[i]=1000,max[i]=0;
		}
	}
int getstramos(int Q,int q,int k,int ktot)
	{
	if(ktot-k>0 && ktot-k<SIZE && Q<=SIZE)
		a[Q][ktot-k]=q;
	if(k==0)
		{
		if(Q<SIZE && ktot<SIZE)a[Q][ktot]=q;
		return q;
		}
	if(Q<SIZE)
		{
		if(min[Q]>ktot-k)min[Q]=ktot-k;
		if(max[Q]<ktot-k)max[Q]=ktot-k;
		}
	if(p[q])return getstramos(Q,p[q],k-1,ktot);
	else return 0;
	}
int main()
{
citire();

int q,k,i;
for(i=1;i<=m;i++)
	{
	f>>q>>k;
	if(q<SIZE && min[q]<=k && k<=max[q])
			g<<a[q][k]<<"n";
	else
	g<<getstramos(q,q,k,k)<<"\n";
	}
f.close();
g.close();
return 0;
}