Pagini recente » Cod sursa (job #2233714) | Cod sursa (job #2009840) | Cod sursa (job #2007261) | Cod sursa (job #1752644) | Cod sursa (job #1013053)
#include<fstream>
using namespace std;
ifstream in("order.in");
ofstream out("order.out");
const int Nmax = 30000;
int N,s=1,cur=2;
int v[20*Nmax];
void Update(int st,int dr,int w,int upd,int i){
v[i]+=upd;
if(st<dr){
int mij=(st+dr)/2;
if(w<=mij) Update(st,mij,w,upd,2*i);
else Update(mij+1,dr,w,upd,2*i+1);
}
}
void parc(int st,int dr,int i){
if(st==dr){
Update(1,N,st,-1,1);
out<<st<<' ';
if(s<N) cur=++s;
else{
cur=0;
return;
}
}
else{
int mij=(st+dr)/2;
if(cur>v[2*i]) cur-=v[2*i];
else if(cur) parc(st,mij,2*i);
if(cur>v[2*i+1]) cur-=v[2*i+1];
else if(cur) parc(mij+1,dr,2*i+1);
}
return;
}
int main(){
in>>N;
for(int i=1;i<=N;i++) Update(1,N,i,1,1);
while(cur){
parc(1,N,1);
}
return 0;
}