Pagini recente » Cod sursa (job #1702389) | Cod sursa (job #746585) | Cod sursa (job #2990868) | Cod sursa (job #2754440) | Cod sursa (job #1794960)
#include <fstream>
#include <vector>
std::ifstream f("order.in");
std::ofstream t("order.out");
int n,poz,val,v[100010];
std::vector <int> sol;
void update(int nod, int st, int dr){
if (st==dr){v[nod]+=val;return;}
int mid=(st+dr)>>1;
if (poz<=mid) update(2*nod,st,mid);
else update(2*nod+1,mid+1,dr);
v[nod]=v[2*nod]+v[2*nod+1];
}
int query(int nod, int st, int dr){
--v[nod];
if (st==dr) return st;
int mid=(st+dr)>>1;
if (v[nod*2]>=val) return query(nod*2,st,mid);
else {
val-=v[nod*2];
return query(nod*2+1,mid+1,dr);
}
}
int main(){
f>>n;
val=1;
for (int i=1; i<=n; ++i)
poz=i,update(1,1,n);
int pas=1;
for (int i=1; i<=n; ++i){
pas=(pas+i)%v[1];
if (!pas) pas=v[1];
val=pas;
poz=query(1,1,n);
sol.push_back(poz);
--pas;
if (!pas)
pas=v[1];
}
for (auto i:sol)
t<<i<<" ";
return 0;
}