Cod sursa(job #3363000)

Utilizator CorvinJudge0Corvin Judge CorvinJudge0 Data 13 august 2026 12:23:17
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>

using namespace std;
int arr[30001];
int ans[30001];
int aint[30001];
void build(int node,int st,int dr)
{
    if(st==dr)
    {
        aint[node]=1;
        return;
    }
    else
    {
        int mid=(st+dr)/2;
        build(node*2,st,mid);
        build(node*2+1,mid+1,dr);
        aint[node]=aint[node*2]+aint[node*2+1];
    }
}
void update(int pos,int node,int st,int dr)
{
    if(st==dr)
    {
        aint[node]=0;
        return;
    }
    int mid=(st+dr)/2;
    if(pos<=mid)
    {
        update(pos,2*node,st,mid);
    }
    else
    {
        update(pos,2*node+1,mid+1,dr);
    }
    aint[node]=aint[node*2]+aint[node*2+1];
}
int cautbin(int node,int st,int dr,int val)
{
    if(st==dr)
    {
        return st;
    }
    else
    {
        int mid=(st+dr)/2;
        if(val>aint[2*node])
        {
            val-=aint[2*node];
            return cautbin(2*node+1,mid+1,dr,val);
        }
        else
        {
            return cautbin(2*node,st,mid,val);
        }
    }

}
int main()
{
    int n,q;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>arr[i];
    }
    build(1,1,n);
    for(int i=n; i>=1; i--)
    {
        int poz=cautbin(1,1,n,arr[i]);
        ans[poz]=i;
        update(poz,1,1,n);
    }
    for(int i=1; i<=n; i++)
    {
        cout<<ans[i]<<"\n";
    }
    return 0;
}