Cod sursa(job #141578)

Utilizator savimSerban Andrei Stan savim Data 23 februarie 2008 14:04:32
Problema Order Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <stdio.h>
#define maxl 65000
int el,put,i,j,k,n;
int c[maxl];
void parc(int poz)
{
	if ((1<<put)-1<poz)
	{
		printf("%d ",poz-(1<<put)+1);
		k-=c[poz];
		c[poz]=0;
		return;
	}
	if (c[2*poz]<k)
	{
		k-=c[2*poz];
		parc(2*poz+1);
	}
	else parc(2*poz);

	c[poz]=c[2*poz]+c[2*poz+1];
}
int main()
{
	freopen("order.in","r",stdin);
	freopen("order.out","w",stdout);

	scanf("%d",&n);
	for (i=1; i<=n; i++)
		if ((1<<i)>=n)
		{
			put=i;
			break;
		}

	for (i=1<<put; i<=(1<<put)+n-1; i++) c[i]=1;

	for (i=put-1; i>=0; i--)
	{
		for (j=1<<i; j<=(1<<i+1)-1; j++)
			c[j]=c[2*j]+c[2*j+1];
	}

	el=2;
	for (i=1; i<=n; i++)
	{
		el--;
		el=(el+i)%c[1];
		if (el==0) el=c[1];
		k=el;
		parc(1);
	}
	printf("\n");

	return 0;
}