Cod sursa(job #1013053)

Utilizator teoionescuIonescu Teodor teoionescu Data 20 octombrie 2013 10:41:41
Problema Order Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#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;
}