Pagini recente » Cod sursa (job #1977156) | Cod sursa (job #2707332) | Cod sursa (job #368584) | Cod sursa (job #2459359) | Cod sursa (job #2616026)
#include <fstream>
using namespace std;
ifstream cin("order.in");
ofstream cout("order.out");
const int nmax=30005;
int n,aib[nmax];
void update(int poz,int val)
{
for(;poz<=n;poz+= poz & -poz)
aib[poz]+=val;
}
int query(int poz)
{
int sum=0;
for(;poz>0;poz-= poz & -poz)
sum+=aib[poz];
return sum;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
update(i,1);
int rest=n,rm=1;
for(int i=1;i<=n;i++)
{
rm+=(i-1);
rm%=rest;
int st=1,dr=n,ans=0;
while(st<=dr)
{
int mij=(st+dr)/2;
if(query(mij)<rm+1)
st=mij+1;
else
{
ans=mij;
dr=mij-1;
}
}
cout<<ans<<" ";
update(ans,-1);
--rest;
}
return 0;
}