Pagini recente » Cod sursa (job #1936243) | Cod sursa (job #1225797) | Cod sursa (job #1980030) | Cod sursa (job #364675) | Cod sursa (job #1807216)
#include <cstdio>
using namespace std;
int aib[30007],n,logn;
void aib_update(int i,int s)
{
for(;i<=n;i+=i&(-i)) aib[i]+=s;
}
int aib_query(int i)
{
int s=0;
for(;i>=1;i-=i&(-i)) s+=aib[i];
return s;
}
int caut_bin(int s)
{
int poz=0;
for(int i=logn;i>=0;i--)
if((poz+(1<<i))<=n && aib[poz+(1<<i)]<s)
{
poz+=1<<i;
s-=aib[poz];
}
return poz+1;
}
int main()
{
freopen("order.in","r",stdin);
freopen("order.out","w",stdout);
int k=2,r;
scanf("%d",&n);
for(int i=1;i<=n;i++) aib_update(i,1);
for(logn=1;(1<<logn)<=n;logn++);
logn--;
for(int j=2;j<=n;j++)
{
r=caut_bin(k);
aib_update(r,-1);
printf("%d ",r);
k=(k-1+j)%(n-j+1);
if(k==0) k=n-j+1;
}
r=caut_bin(k);
printf("%d ",r);
return 0;
}