Cod sursa(job #829324)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 5 decembrie 2012 01:20:14
Problema Order Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <iostream>
using namespace std;

int v[65537], s, p;
ifstream in("order.in"); ofstream out("order.out");

void build(int nod, int stg, int dpt)
{
	if (stg == dpt)
	{
		v[nod] = 1;
		return;
	}
	
	int m = (stg+dpt)>>1, fiu = nod<<1;
	build(fiu, stg, m);
	build(fiu+1, m+1, dpt);
	v[nod] = v[fiu] + v[fiu+1];
}

void del(int nod, int stg, int dpt)
{
	if (stg == dpt)
	{
		v[nod] = 0;
		out<<stg<<" ";
		return;
	}
	
	int m = (stg+dpt)>>1, fiu = nod<<1;
	if (s <= v[fiu])
	{
		del(fiu, stg, m);
		--v[nod];
	}
	else
	{
		s -= v[fiu];
		del(fiu+1, m+1, dpt);
		--v[nod];
		p += v[nod] - v[fiu+1];
	}
}

int main()
{
	int n, i;
	in>>n;
	build(1, 1, n);
	
	p = 1;
	for (i=1;v[1];++i)
	{
		s = (p+i)%v[1];
		if (!s) s = v[1];
		p = 0;
		del(1, 1, n);
	}
}