Pagini recente » Cod sursa (job #3355558) | Monitorul de evaluare | Cod sursa (job #3229294) | Cod sursa (job #3330504) | Cod sursa (job #3334671)
#include<iostream>
#include<bitset>
using namespace std;
#define NMAX 30003
int n,aib[NMAX],cn;
bitset<NMAX>b;
void update(int ind,int val){
for(;ind<=n;ind+=(ind&-ind)){
aib[ind]+=val;
}
}
int query(int ind){
int sum=0;
for(;ind>0;ind-=(ind&-ind)){
sum+=aib[ind];
}
return sum;
}
int binsearch(int target){
int st=1,dr=n,ans=-1;
while(st<=dr){
int mij=(st+dr)/2;
int q=query(mij);
if(target<=q){
if(q==target)ans=mij;
dr=mij-1;
}else{
st=mij+1;
}
}
return ans;
}
int main(void){
freopen("order.in","r",stdin);
freopen("order.out","w",stdout);
cin>>n;
for(int i=1;i<=n;++i)update(i,1);
cn=n;
int l=1,p=1;
for(int i=1;i<=n;++i){
p+=i;
p%=cn;
if(!p)p+=cn;
l=binsearch(p);
update(l,-1);
cout<<l<<" ";
--cn;
--p;
}
return 0;
}