Cod sursa(job #1591311)

Utilizator elevenstrArina Raileanu elevenstr Data 5 februarie 2016 23:53:56
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");
#define MAX 30008
int n,a,b,v[MAX],bit[MAX],sol[MAX];
void upd(int poz, int val)
{   int c=0;
    while(poz<=n)
    {
        bit[poz]+=val;
        while((poz&(1<<c))==0)++c;
        poz=poz+(1<<c);
        ++c;
    }
}
int caut(int sum)
{
    int pas=1,i;
    while(pas<n)
        pas=pas<<1;
    for( i=0;pas;pas=pas>>1)
    {
        if(i+pas<=n)
        {
            if(sum>=bit[i+pas])
            {
                sum=sum-bit[i+pas];
                i=i+pas;
            }
        }
    }
    return i;
}
int main()
{
    in>>n;
    for(int i=1;i<=n;i++)
        in>>v[i];
     for(int i=1;i<=n;i++)
        upd(i,1);
    for(int i=n;i>=1;i--)
    {
        int x=caut(v[i]-1);
        sol[x+1]=i;
        upd(x+1,-1);
    }
    for(int i=1;i<=n;i++)
        out<<sol[i]<<'\n';

    return 0;
}