Cod sursa(job #2087548)

Utilizator Andrei2000Andrei Mihailescu Andrei2000 Data 13 decembrie 2017 20:20:27
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("schi.in");
ofstream fout ("schi.out");

const int nmax=30002;

stack <int> S;

int n,v[nmax],a,b,arb[4*nmax],loc[nmax];

void query(int node, int left, int right){
    if(left==right){
        b=left;
        return;
    }
    int mid=(left+right)/2;
    if(mid-left+1-arb[2*node]>=a)query(2*node,left,mid);
    else {
        a-=mid-left+1-arb[2*node];
        query(2*node+1,mid+1,right);
    }
}

void update(int node, int left, int right){
    if(left==right){
        arb[node]=1;
        return;
    }
    int mid=(left+right)/2;
    if(b<=mid)update(2*node,left,mid);
    else update(2*node+1,mid+1,right);
    arb[node]=arb[2*node]+arb[2*node+1];
}

int main()
{
    fin>>n;
    for(int i=1;i<=n;++i)
        fin>>v[i];
    for(int i=n;i>=1;--i){
        a=v[i];
        query(1,1,n);
        update(1,1,n);
        loc[b]=i;
    }
    for(int i=1;i<=n;++i)fout<<loc[i]<<'\n';
    return 0;
}