Cod sursa(job #1766219)

Utilizator costin7856Antonesi Florean Costin costin7856 Data 27 septembrie 2016 18:27:06
Problema Schi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<fstream>
#include<cstdio>
#include<cstdlib>
#define dim 30009
using namespace std;
long n,poz,val,a[dim],pi[dim],pf[dim],mij;

void schimba(long nod,long st,long dr)
{
    if(st==dr)
    {
        a[nod]=val;
        return;
    }
    mij=(st+dr)/2;
    if(poz<=mij)
    schimba(nod*2,st,mij);
    else
    schimba(nod*2+1,mij+1,dr);
    a[nod]=a[nod*2]+a[nod*2+1];
}
void detclas(long nod,long st,long dr,long sum)
{
    if(st==dr)
    poz=st;
    else
    {
        mij=(st+dr)/2;
        if(a[nod*2]>=sum)
        detclas(nod*2,st,mij,sum);
        else
        detclas(nod*2+1,mij+1,dr,sum-a[nod*2]);
    }
}
void citire()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&pi[i]);
        poz=i;
        val=1;
        schimba(1,1,n);
    }
}
void rez()
 {
    val=0;
    for(int i=n;i>=1;i--)
     {
        detclas(1,1,n,pi[i]);
        pf[poz]=i;
        schimba(1,1,n);
    }
}
void afisare()
{
    for(int i=1;i<=n;i++)
        printf("%d\n",pf[i]);
}

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