Cod sursa(job #834442)

Utilizator krissu93FMI Tiugan Cristiana Elena krissu93 Data 14 decembrie 2012 12:45:18
Problema Order Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("order.in");
ofstream out("order.out");

int arb[60000];
int n,p,s;

void build(int nod, int st, int dr)
{
	if (st==dr) 
	{
		arb[nod]=1;
		return;
	}
	else
	{
		int mij=(st+dr)/2;
		int fiu=2*nod;
		build(fiu,st,mij);
		build(fiu+1,mij+1,dr);
		arb[nod]=arb[fiu]+arb[fiu+1];
	}
}

void ask(int nod, int st, int dr)
{
	if (st==dr)
	{
		arb[nod]=0;
		out<<st<<' ';
	}
	else
	{
		int mij=(st+dr)/2;
		int fs=2*nod;
		int fd=2*nod+1;
		if (arb[fs]>=p)
		{
			ask(fs,st,mij);
			arb[nod]--;
		}
		else
		{
			p=p-arb[fs];
			ask(fd,mij+1,dr);
			arb[nod]--;
			s=s+arb[nod]-arb[fd];
		}
	}
}
int main()
{
	in>>n;
	s=1;
	build(1,1,n);
	for (int i=1;i<=n;i++)
	{
		p=(s+i) % arb[1];
		if (!p) p=arb[1];
		s=0;
		ask(1,1,n);
	}
return 0;
}