Cod sursa(job #2199069)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 26 aprilie 2018 16:58:00
Problema Schi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <list>

using namespace std;

ifstream fin("schi.in");
ofstream fout("schi.out");

const int N=30000;
int aib[N+5],n;

int f(int x)
{
    return x&(-x);
}

void add(int poz,int val)
{
    for(int i=poz;i<=n;i+=f(i))
        aib[i]+=val;
}

int prefix(int poz)
{
    int sol=0;
    for(int i=poz;i>=1;i-=f(i))
        sol+=aib[i];
    return sol;
}

int v[N+5],loc[N+5];

int cauta(int val)
{
    int r=0,pas=(1<<14);
    while(pas)
    {
        if(r+pas<=n && r+pas+1-prefix(r+pas)<=val)
            r+=pas;
        pas/=2;
    }
    return r+1;
}

int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    for(int i=n;i>=1;i--)
    {
        int poz=cauta(v[i]);
        add(poz,1);
        loc[poz]=i;
    }
    for(int i=1;i<=n;i++)
        fout<<loc[i]<<"\n";
    return 0;
}
/**
**/