Cod sursa(job #3363011)

Utilizator CorvinJudge0Corvin Judge CorvinJudge0 Data 13 august 2026 13:00:30
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>

using namespace std;

ifstream cin("schi.in");
ofstream cout("schi.out");

int arr[30001],ans[30001],aint[120001];

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,node*2,st,mid);
    else
        update(pos,node*2+1,mid+1,dr);
    aint[node]=aint[node*2]+aint[node*2+1];
}
int cb(int node,int st,int dr,int val)
{
    if(st==dr)
        return st;
    int mid=(st+dr)/2;
    if(val>aint[node*2])
    {
        val-=aint[node*2];
        return cb(node*2+1,mid+1,dr,val);
    }
    return cb(node*2,st,mid,val);
}

int main()
{
    int n,m;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>arr[i];
    build(1,1,n);
    for(int i=n;i;i--)
    {
        int poz=cb(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;
}