Pagini recente » Cod sursa (job #3038997) | Cod sursa (job #761057) | Cod sursa (job #1613126) | Cod sursa (job #495703) | Cod sursa (job #1425662)
#include <cstdio>
#include <climits>
#define ub(x) (x&(-x))
using namespace std;
int a[30005],A[30005],n,i,ind,cop,x;
void add(int poz,int val)
{
int i;
for (i=poz;i<=n;i+=ub(i))
A[i]+=val;
return;
}
int sum(int poz)
{
int i,s=0;
for (i=poz;i>0;i-=ub(i))
s+=A[i];
return s;
}
int caut(int x)
{
int st,dr,miny=INT_MAX,mij,xx;
st=1;
dr=n;
while (st<=dr)
{
mij=(st+dr)/2;
xx=sum(mij);
if (xx==x&&mij<miny)miny=mij;
else if (xx>=x)dr=mij-1;
else st=mij+1;
}
return miny;
}
int mod(int x,int MOD)
{
if (x%MOD==0)return MOD;
return x%MOD;
}
void decrease(int poz,int val)
{
int i;
for (i=poz;i<=n;i+=ub(i))
A[i]-=val;
return ;
}
int main()
{
freopen("order.in","r",stdin);
freopen("order.out","w",stdout);
scanf("%d\n",&n);
for (i=1;i<=n;i++)
add(i,1);
ind=n;
cop=2;
for (i=1;i<=n;i++)
{
ind--;
x=caut(cop);
decrease(x,1);
a[i]=x;
cop+=i;
if (ind!=0)cop=mod(cop,ind);
}
for (i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
return 0;
}