Cod sursa(job #1624437)

Utilizator andi12Draghici Andrei andi12 Data 2 martie 2016 11:01:12
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>

using namespace std;
const int N=30005;
int v[N],aib[4*N+66],clasament[N];
int poz,val,start,fin,plu;
void ras(int nod,int st,int dr)
{
    int mid;
    if(start<=st && dr<=fin)
    {
        plu=plu+aib[nod];
        fin=fin+aib[nod];
        return ;
    }
    else
    {
        mid=(st+dr)/2;
        if(start<=mid)
            ras(2*nod,st,mid);
        if(fin>mid)
            ras(2*nod+1,mid+1,dr);
    }
}
void update(int nod,int st,int dr)
{
    int mid;
    if(st==dr)
    {
        aib[nod]++;
        return ;
    }
    else
    {
        mid=(st+dr)/2;
        if(poz<=mid)
            update(2*nod,st,mid);
        if(poz>mid)
            update(2*nod+1,mid+1,dr);
    }
    aib[nod]=aib[2*nod]+aib[2*nod+1];
}
int main()
{
    FILE *in,*out;
    in=fopen("schi.in","r");
    out=fopen("schi.out","w");
    int n,i;
    fscanf(in,"%d",&n);
    for(i=1;i<=n;i++)
        fscanf(in,"%d",&v[i]);
    for(i=n;i>=1;i--)
    {
        start=1;
        fin=v[i];
        plu=0;
        ras(1,1,n);
        clasament[v[i]+plu]=i;
        val=1;
        poz=v[i]+plu;
        update(1,1,n);
    }
    for(i=1;i<=n;i++)
        fprintf(out,"%d\n",clasament[i]);
    return 0;
}