Cod sursa(job #2952972)

Utilizator GILIEDAVIDGilie David Florin GILIEDAVID Data 10 decembrie 2022 11:46:48
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int sol[30002],aib[30002],v[30002],n;

void update(int poz,int x)
{
    while(poz<=n)
    {
        aib[poz]+=x;
        poz+=(poz&(-poz));
    }
}

int suma(int poz)
{
    int ans=0;
    while(poz>0)
    {
        ans+=aib[poz];
        poz-=(poz&(-poz));
    }
    return ans;
}

int cautare(int x)
{
    int st=1,dr=n;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(suma(mij)>=x)
            dr=mij-1;
        else
            st=mij+1;
    }
    return st;
}
int main()
{f>>n;
for(int i=1;i<=n;i++)
{
     f>>v[i];
     update(i,1);
}
for(int i=n;i>=1;i--)
{
    int k=cautare(v[i]);
    sol[k]=i;
    update(k,-1);
}
for(int i=1;i<=n;i++)
    g<<sol[i]<<'\n';
    return 0;
}