Cod sursa(job #1052435)

Utilizator alecsandrualex cuturela alecsandru Data 11 decembrie 2013 12:07:58
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<cstdio>
using namespace std;
int t[1<<18],v[1<<18],start,poz,n,i,x,read[30001];
void update(int p,int st,int dr)
{
    int m;
    if(st==dr)
    {
        return;
    }
    m=(st+dr)/2;
    if(poz<=m)
        update(2*p,st,m);
    else
        update(2*p+1,m+1,dr);
    t[p]=t[2*p]+t[2*p+1];
}
void query(int p,int st,int dr)
{
    if(st==dr)
    {
        v[st]=i;
        t[p]=1;
        return;
    }
    int m=(st+dr)>>1;
    int g=m-st+1;
    if(poz<=g-t[2*p])
        query(2*p,st,m);
    else
        {
            poz-=g-t[2*p];
            query(2*p+1,m+1,dr);
        }
    t[p]++;
}
int main()

{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&read[i]);
    }
    poz=0;
    for(i=n;i>=1;i--)
    {
        start=i;
        poz=read[i];
        query(1,1,n);
        update(1,1,n);
    }
    for(i=1;i<=n;i++)
        printf("%d\n",v[i]);
    return 0;
}