Cod sursa(job #990329)

Utilizator andrettiAndretti Naiden andretti Data 27 august 2013 23:01:17
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>
#define maxn 30005
using namespace std;

int n;
int a[maxn],aib[maxn],sol[maxn];

void update(int k,int val)
{
    int i=0;
    while(k<=n)
    {
        aib[k]+=val;
        while( ((k>>i)&1)==0 ) i++;
        k+=(1<<i++);
    }
}

int query(int val)
{
    int i,step,sum=0,sol;
    for(step=1;step<n;step<<=1);
    for(i=0;step;step>>=1)
     if(i+step<=n)
     {
         if(aib[i+step]+sum==val) sol=i+step;
         else
          if(aib[i+step]+sum<val) i+=step,sum+=aib[i];
     }
     return sol;
}

void read()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]),update(i,1);
}

void solve()
{
    int pos;
    for(int i=n;i>=1;i--)
    {
        pos=query(a[i]);
        sol[pos]=i;
        update(pos,-1);
    }
}

void print()
{
    for(int i=1;i<=n;i++)
     printf("%d\n",sol[i]);
}

int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);

    read();
    solve();
    print();

    fclose(stdin);
    fclose(stdout);
    return 0;
}