Cod sursa(job #214702)

Utilizator catalina5catalina serban catalina5 Data 15 octombrie 2008 18:01:38
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<iostream>
#include<fstream>

#define form ((p^(p-1))&p)
//schi rez cu aib;

using namespace std;

ifstream fin("schi.in");
ofstream fout("schi.out");

int n,a[30001],b[30001],c[30001];
void modificare(int p,int x){
    while(p<=n){
        c[p]+=x;
        p+=form;
    }
}

int suma(int p){
    int s=0;
    while(p>0){
        s+=c[p];
        p-=form;
    }
    return s;
}

int minim(int x){
    int step,i;
    for(step=1;step<n;step<<=1);
        for(i=n;step;step>>=1)
            if(i-step>=1)
                if(x<=suma(i-step))
                     i-=step;
    return i;
}

void citire(){
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>a[i];
}

void parc(){
    int k;
    for(int i=1;i<=n;i++)
        modificare(i,1);
    for(int i=n;i;i--){
        k=minim(a[i]);
        b[k]=i;
        modificare(k,-1);
    }
}

void afisare(){
    for(int i=1;i<=n;i++)
        fout<<b[i]<<"\n";
}

int main (){
     citire();
     parc();
     afisare();
     return 0;
}