Cod sursa(job #568343)

Utilizator Robert29FMI Tilica Robert Robert29 Data 31 martie 2011 08:57:24
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<fstream>
using namespace std;
ifstream fi("stramosi.in");
ofstream fo("stramosi.out");
int z,y,i,k,v[250001],a[250001][20],n,m,p,q;
void dfs(int x){
	if(!x)
		return;
	if(z==y){
		a[i][++k]=x;
		y*=y;
	}
	
	z++;
	dfs(v[x]);
	
}
int main() {
	fi>>n>>m;
	for(i=1;i<=n;++i)
		fi>>v[i];
	
	for(i=1;i<=n;++i){
		z=1;
		y=2;
		k=1;
		a[i][1]=v[i];
		dfs(v[i]);
	}
	
	for(i=1;i<=m;++i){
		fi>>q>>p;
		int y=q;
		int ok=1;
		while(ok){
			int x=2;
			int k=2;
			if(p==1){
				fo<<v[y]<<'\n';
				break;
			}else if(!p){
				fo<<y<<'\n';
				break;
			}
			while(p>=x){
				x*=x;
				++k;
			}
			x/=2;
			--k;
			y=a[y][k];
			p-=x;
		}
	}
	
	
	
	fo.close();
	fi.close();
	return 0;
}