Pagini recente » Cod sursa (job #2836724) | Cod sursa (job #2209013) | Cod sursa (job #2858906) | Cod sursa (job #2831142) | Cod sursa (job #1146652)
#include<cstdio>
#define zeros(i) (i&(-i))
using namespace std;
int a[30002],nr,aeux,peuz,i,n,x,aib[30002];
void apdeit(int peuz,int valeur)
{
int i;
for(i=peuz;i<=n;i+=zeros(i))
{
aib[i]+=valeur;
}
}
int cuerii(int peuz)
{
int i,valeur;
valeur=0;
for(i=peuz;i>=1;i-=zeros(i))
{
valeur+=aib[i];
}
return valeur;
}
int bainarisarci(int valeur)
{
int dr,st,mij,s,mn;
dr=n;
mn=992193823;
st=1;
while(st<=dr)
{
mij=(st+dr)/2;
s=cuerii(mij);
if(s==valeur&&mij<mn)
{
mn=mij;
}
else if(s>=valeur)
{
dr=mij-1;
}
else
{
st=mij+1;
}
}
return mn;
}
int main()
{
freopen("order.in","r",stdin);
freopen("order.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
apdeit(i,1);
}
peuz=2;
aeux=n-1;
for(i=1;i<=n;i++)
{
x=bainarisarci(peuz);
apdeit(x,-1);
a[++nr]=x;
peuz+=i;
if(peuz>aeux&&i!=n)
{
peuz%=aeux;
}
if(peuz==0&&i!=n)
{
peuz=aeux;
}
aeux--;
}
for(i=1;i<nr;i++)
{
printf("%d ",a[i]);
}
printf("%d\n",a[nr]);
}