Cod sursa(job #2940760)

Utilizator Theo14Ancuta Theodor Theo14 Data 16 noiembrie 2022 12:39:03
Problema Schi Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<bits/stdc++.h>
#define int long long
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");

int n,v[30005],aib[35],ans[30005],pw;

void update(int poz,int val)
{
    int i;
    for(i=poz;i<=n;i+=i&-i)
        aib[i]+=val;
}

int find_poz(int x)
{
    int p=pw,poz=0;
    while(p>0)
    {
        if(aib[poz+p]<x)
            x-=aib[poz+p],poz+=p;
        p/=2;
        while(poz+p>n && p>1)
            p/=2;
    }
    return poz+1;
}

signed main()
{
    int i,poz;
    f>>n;
    for(i=1;i<=n;i++)
        f>>v[i],update(i,1);
    pw=1;
    while(pw<=n)
        pw*=2;
    pw/=2;
    for(i=n;i>=1;i--)
    {
        poz=find_poz(v[i]);
        update(poz,-1);
        ans[poz]=i;
    }
    for(i=1;i<=n;i++)
        g<<ans[i]<<'\n';
    return 0;
}