Cod sursa(job #312485)

Utilizator geoNechifor George geo Data 6 mai 2009 11:03:02
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;

#define MAXP 18
int n,m;
int q,p;
int stram[250001][MAXP];
int pows[MAXP];
#define BUFFSIZE 1024
char bufferin[BUFFSIZE];
char bufferout[BUFFSIZE];

int main() {
	//time_t tStart,tEnd;//<--
	//time(&tStart);
	FILE *fin;
	//fin.rdbuf()->pubsetbuf(bufferin,BUFFSIZE);
	fin = fopen("stramosi.in","rt");
	FILE *fout;
	//fout.rdbuf()->pubsetbuf(bufferout,BUFFSIZE);
	fout = fopen("stramosi.out","wt");
	fscanf(fin,"%d%d",&n,&m);
	pows[0]=1;
	for (int i=1;i<MAXP;i++)
		pows[i]=pows[i-1]*2;
	for (int i=1;i<=n;i++)
		fscanf(fin,"%d",&stram[i][0]);
	stram[0][0]=0;
	for (int i=1;i<MAXP;i++) {
		for (int j=0;j<=n;j++) {
			stram[j][i]=stram[stram[j][i-1]][i-1];
		}
	}
	for (int i=0;i<m;i++) {
		fscanf(fin,"%d%d",&q,&p);
		for (int pi = MAXP -1;pi>=0;pi--) {
			if (p>=pows[pi]) {
				p-=pows[pi];
				q=stram[q][pi];
			}
		}
		fprintf(fout,"%d\n",q);
	}
	fclose(fin);
	fclose(fout);
	//time(&tEnd);
	//cout<<"Number of seconds elapsed:"<<difftime(tEnd,tStart)<<endl;
	return 0;
}