Pagini recente » Cod sursa (job #1963633) | Cod sursa (job #3308976) | Cod sursa (job #2473445) | Cod sursa (job #1206129) | Cod sursa (job #3334432)
#include <fstream>
using namespace std;
ifstream cin ("order.in");
ofstream cout ("order.out");
int n;
int aib[30005];
void update(int poz,int val) {
while (poz<=n) {
aib[poz]+=val;
poz+=poz & (-poz);
}
}
int query(int poz) {
int sum=0;
while (poz>0) {
sum+=aib[poz];
poz-=poz & (-poz);
}
return sum;
}
int main() {
cin>>n;
for (int i=1; i<=n; i++) {
update(i,1);
}
int pozitie=1;
for (int i=1; i<=n; i++) {
int cnt=(pozitie+i)%(n-i+1);
if (cnt==0) cnt=n-i+1;
int l=1,r=n,ans=0;
while (l<=r) {
int mid=(l+r)/2;
if (query(mid)>=cnt) {r=mid-1; ans=mid;}
else if (query(mid)<cnt) l=mid+1;
}
cout<<ans<<' ';
update(ans,-1);
pozitie=cnt-1;
}
}