Cod sursa(job #1470042)

Utilizator acomAndrei Comaneci acom Data 10 august 2015 12:03:12
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<fstream>
using namespace std;
#define NMAX 30005
ifstream fin("schi.in");
ofstream fout("schi.out");
int n,x,A[NMAX],AIB[NMAX],C[NMAX];
inline void update(int p, int x)
{
    for (;p<=n;p+=(p&-p))
        AIB[p]+=x;
}
inline int suma(int p)
{
    int s=0;
    for (;p>0;p-=(p&-p))
        s+=AIB[p];
    return s;
}
inline int cb(int p)
{
    int st=1,dr=n,mij;
    while (st<=dr)
    {
        mij=(st+dr)>>1;
        if (suma(mij)<p)
            st=mij+1;
        else
            dr=mij-1;
    }
    return st;
}
int main()
{
    int i;
    fin>>n;
    for (i=1;i<=n;++i)
    {
        fin>>A[i];
        update(i,1);
    }
    for (i=n;i>0;--i)
    {
        x=cb(A[i]);
        C[x]=i;
        update(x,-1);
    }
    for (i=1;i<=n;++i)
        fout<<C[i]<<"\n";
    return 0;
}