Cod sursa(job #656847)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 5 ianuarie 2012 13:47:52
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.58 kb
//
// RMQ[i][j]=al 2^j stramos a lui i
#include<fstream>
#define NMAX 250100
using namespace std;
int n,RMQ[NMAX][20],log_2[NMAX];
void _rmq() {
	int i,j;
	for(i=2;i<=n;i++)
		log_2[i]=log_2[i/2]+1;
	for(j=1;(1<<j)<=n;j++)
		for(i=1;i<=n;i++)
			RMQ[i][j]=RMQ[ RMQ[i][j-1] ][ j-1 ];
}
int main() {
	int i,m,x,y;
	ifstream in("stramosi.in");
	ofstream out("stramosi.out");
	in>>n>>m;
	for(i=1;i<=n;i++)
		in>>RMQ[i][0];
	_rmq();
	for(i=0;i<m;i++) {
		in>>x>>y;
		while(y&&x) {
			x=RMQ[x][log_2[y]];
			y-=(1<<log_2[y]);
			}
		out<<x<<'\n';
		}
	return 0;
}