Cod sursa(job #2823547)

Utilizator stefanvoicaVoica Stefan stefanvoica Data 28 decembrie 2021 19:57:07
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("schi.in");
ofstream fout("schi.out");
int n,v[30002],pw=1,sol[30002],w[30002];

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

int cb (int s)
{
    bool ok=0;
    int poz=0,pas=pw;
    while (pas!=0)
    {
        if (v[pas+poz]==s)
            ok=1;
        if (v[pas+poz]<s)
        {
            s-=v[pas+poz];
            poz+=pas;
        }
        pas/=2;
        while(pas>=1&&pas+poz>n)
           pas/=2;
    }
    if (ok)
        return poz+1;
    else
        return -1;
}

int main()
{
    int i,x;
    fin>>n;
    for (i=1;i<=n;i++)
    {
        update (i,1);
        fin>>w[i];
    }
    while (pw<=n)
        pw*=2;
    pw/=2;
    for (i=n;i>0;i--)
    {
        x=cb(w[i]);
        sol[x]=i;
        update(x,-1);
    }
    for (i=1;i<=n;i++)
        fout<<sol[i]<<'\n';
    return 0;
}