Cod sursa(job #1425476)

Utilizator tac1234Tran Bach Nguyen tac1234 Data 27 aprilie 2015 15:57:27
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
using namespace std;
const int NMAX=30000;
int p[NMAX+5],aib[NMAX+5],sol[NMAX+5],n;
inline void update(int poz)
{
    for( ; poz<=n; poz+=poz&-poz)
        ++aib[poz];
}
inline int find(int k)
{
    int last,s,f,poz,query_poz,kk;
    for(register int i=(1<<15),s=0,f=0; i>=1; i>>=1)
        if (s+i<=n)
        {
            poz=s+i;
            query_poz=f+aib[poz];
            kk=poz-query_poz;
            if (kk<k)
            {
                s+=i;
                f+=aib[s];
            }
            else
                if (kk==k)
                    last=s+i;
        }
    return last;
}

int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    int poz;
    scanf("%d",&n);
    for(register int i=1; i<=n; ++i)
        scanf("%d",&p[i]);
    for(register int i=n; i>=1; --i)
    {
        poz=find(p[i]);
        sol[poz]=i;
        update(poz);
    }
    for(register int i=1; i<=n; ++i)
        printf("%d\n",sol[i]);
    return 0;
}