Cod sursa(job #2955890)

Utilizator MarutBrabete Marius Stelian Marut Data 18 decembrie 2022 01:45:22
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>
using namespace std;
int v[30005],aint[120005],ans[30005];
void update(int node, int st, int dr, int where)
{
    if(st==dr)
    {
        aint[node]=true;
        return;
    }
    int med=(st+dr)>>1;
    if(where<=med) update(2*node,st,med,where);
        else update(2*node+1,med+1,dr,where);
    aint[node]=aint[2*node]+aint[2*node+1];
}
int query(int node, int st, int dr, int poz)
{
    if(st==dr) return st;
    int med=(st+dr)>>1;
    if(poz<=(med-st+1)-aint[2*node]) return query(2*node,st,med,poz);
        else return query(2*node+1,med+1,dr,poz-med-1+st+aint[2*node]);
}
int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    int n;
    scanf("%d",&n);
    for(register int i=1;i<=n;i++)
        scanf("%d",&v[i]);
    for(register int i=n;i>=1;--i)
    {
        int poz=query(1,1,n,v[i]);
        update(1,1,n,poz);
        ans[poz]=i;
    }
    for(register int i=1;i<=n;i++)
        printf("%d\n",ans[i]);
    return 0;
}