Cod sursa(job #1833569)

Utilizator delta_wolfAndrei Stoica delta_wolf Data 22 decembrie 2016 17:40:23
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>

using namespace std;
int n;
int arbint[120001],a[30001],sol[30001];
void update(int node,int left,int right,int pos,int x)
{
    if(left==right)
    {
        arbint[node]=x;
        return;
    }
    int mid=(left+right)/2;
    if(pos<=mid)
        update(2*node,left,mid,pos,x);
    else update(2*node+1,mid+1,right,pos,x);
    arbint[node]=arbint[2*node]+arbint[2*node+1];
}
int seek(int node,int left,int right,int x)
{
    if(left==right)
        return left;
    int mid=(left+right)/2;
    if(x>arbint[2*node])
       return seek(2*node+1,mid+1,right,x-arbint[2*node]);
    return seek(2*node,left,mid,x);
}
int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        update(1,1,n,i,1);
    }
    for(int i=n;i;i--)
    {
        int pos=seek(1,1,n,a[i]);
        sol[pos]=i;
        update(1,1,n,pos,0);
    }
    for(int i=1;i<=n;i++)
        printf("%d\n",sol[i]);
    return 0;
}