Cod sursa(job #2129919)

Utilizator mateibanuBanu Matei Costin mateibanu Data 13 februarie 2018 11:37:34
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;

int n;
int ai[120010],v[30010],r[30010];

void build(int o, int a, int b){
    if (a==b) {ai[o]=1;return;}
    int m=(a+b)/2;
    build(o*2,a,m);
    build(o*2+1,m+1,b);
    ai[o]=ai[o*2]+ai[o*2+1];
}

int cauta(int o, int a, int b, int p){
    if (a==b) {
        ai[o]=0;
        return a;
    }
    int m=(a+b)/2,x;
    if (p<=ai[o*2]) x=cauta(o*2,a,m,p);
    else x=cauta(o*2+1,m+1,b,p-ai[o*2]);
    ai[o]=ai[o*2]+ai[o*2+1];
    return x;
}

int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    int i;
    scanf("%d",&n);

    for (i=1;i<=n;i++) scanf("%d",&v[i]);

    build(1,1,n);

    for (i=n;i;i--){
        r[cauta(1,1,n,v[i])]=i;
    }
    for (i=1;i<=n;i++) printf("%d\n",r[i]);
    return 0;
}