Cod sursa(job #399403)

Utilizator freak93Adrian Budau freak93 Data 20 februarie 2010 14:08:06
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<fstream>

using namespace std;

const char iname[]="schi.in";
const char oname[]="schi.out";
const int  maxn=30005;

ifstream f(iname);
ofstream g(oname);

int aib[maxn],a[maxn],i,j,n,final[maxn];

void update(int x,int y)
{
    for(;x<=n;x+=x&-x)
        aib[x]+=y;
}

int query(int x)
{
    int step,i;
    for(step=1;step<n;step<<=1);
    for(i=0;step;step>>=1)
        if(i+step<=n&&aib[i+step]<x)
            x-=aib[i+step],i+=step;
    return i+1;
}

int main()
{
    f>>n;
    for(i=1;i<=n;++i)
        f>>a[i],update(i,1);
    for(i=n;i;--i)
        j=query(a[i]),update(j,-1),final[j]=i;

    for(i=1;i<=n;++i)
        g<<final[i]<<"\n";

    f.close();
    g.close();

    return 0;
}