Cod sursa(job #2137581)

Utilizator alexandra_paticaAndreea Alexandra Patica alexandra_patica Data 20 februarie 2018 21:37:48
Problema Schi Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#include <algorithm>
using namespace std;

struct punct
{
    int place, i;
}a[30002];

int n, i, ind, val, Arb[100002], x;

bool cmp (punct a, punct b)
{
    return (a.place<b.place);
}

void update(int nod, int st, int dr)
{
    if (st>dr) return;
    if (st==dr && st==ind){
        Arb[nod]=val;
        a[st].place=val;
        return;
    }

    else if (st==dr){
        if (Arb[nod]>=val){
            Arb[nod]++;

            a[st].place=Arb[nod];
        }
        return;
    }

    int mij=(st+dr)/2;

    if (Arb[2*nod]>=val || ind<=mij) update(2*nod, st, mij);
    if (Arb[2*nod+1]>=val || ind>mij) update(2*nod+1, mij+1, dr);

    Arb[nod]=max(Arb[2*nod], Arb[2*nod+1]);
}


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

    scanf("%d", &n);

    for (i=1; i<=n; i++){
        scanf("%d", &x);
        ind=i; val=x;
        a[i].i=i;
        update(1, 1, n);

    }
    sort(a+1, a+n+1, cmp);
    for (i=1; i<=n; i++) printf("%d\n", a[i].i);
    return 0;
}