Cod sursa(job #2549290)

Utilizator AlexBolfaAlex Bolfa AlexBolfa Data 17 februarie 2020 15:39:31
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>
#define NMAX (int)(3e4+4)
#define pb emplace_back
#define ft first
#define sd second
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
typedef pair <int, int> pairINT;
typedef long long ll;
class SegmentTree{
    public:
        int n;
        int query(int poz){
           return qry(1,1,n,poz);
        }
    private:
        int segm[NMAX*4];
        int qry(int node,int l,int r, int poz){
            if(l == r){
                segm[node]=1;
                return l;
            }
            int ans,mid=(l+r)>>1,amm=(mid-l+1)-segm[node<<1];
            if(amm >= poz)
                ans=qry(node<<1,l,mid,poz);
            else
                ans=qry(node<<1|1,mid+1,r,poz-amm);
            segm[node]=segm[node<<1]+segm[node<<1|1];
            return ans;
        }
};

int n,v[NMAX],sol[NMAX];
SegmentTree Arb;

int main(){
    fin>>n;
    Arb.n=n;;
    for(int i=1;i<=n;++i)
        fin>>v[i];
    for(int i=n;i>0;--i)
        sol[Arb.query(v[i])]=i;
    for(int i=1;i<=n;++i)
        fout<<sol[i]<<'\n';
    return 0;
}