Cod sursa(job #772774)

Utilizator starduststardust stardust Data 30 iulie 2012 18:19:50
Problema Order Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
#define maxn 30010


using namespace std;

int arb[maxn];

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

int val,poz,n,s,pozitie,ans,j;

void update(int nod,int left,int right)
{
	if(left==right)
	{
		arb[nod]=val;
		return;
	}
	int mid=(left+right)/2;
	if(poz<=mid) update(2*nod,left,mid);
	else update(2*nod+1,mid+1,right);
	
	arb[nod]=arb[2*nod]+arb[2*nod+1];
}

void findpoz(int nod,int left,int right)
{
	if(left==right)
	{
		poz=left;
		return;
	}
	int mid=(left+right)/2;
	if(val<=arb[2*nod]) findpoz(2*nod,left,mid);
	else
	{
		val-=arb[2*nod];
        findpoz(2*nod+1,mid+1,right);
    }
}	

void read()
{
	in>>n;
	for(int i=1;i<=n;i++)
	{
		poz=i;
		val=1;
		update(1,1,n);
	}
	j=2;
	for(int i=0;i<n;i++)
	{
		j = ( j + i -1 ) % (n-i)+1;
		val=j;
		findpoz(1,1,n);
		out<<poz<<" ";
		val=0;
		update(1,1,n);
	}
}
			
int main()
{
	read();
}