Cod sursa(job #3341609)

Utilizator Andrei_GAndreiG Andrei_G Data 20 februarie 2026 13:15:08
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
#include <iomanip>
#include <numeric>
#include <bitset>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#define int long long
//#define int short
#define f first
#define s second
using namespace std;

int n, v[30005], aib[30005], r[30005];

void update(int poz, int val){
    while (poz <= n){
        aib[poz] += val;
        poz += poz & (-poz);
    }
}

int query(int val){
    int pos = 0;
    for (int i = log2(n); i >= 0; i--){
        if (pos + (1 << i) <= n && aib[pos + (1 << i)] < val){
            pos += (1 << i);
            val -= aib[pos];
        }
    }
    return pos + 1;
}

signed main(){
    cin>>n;
    for (int i = 1; i <= n; i++){
        cin>>v[i];
    }
    for (int i = 1; i <= n; i++){
        update(i, 1);
    }
    for (int i = n; i >= 1; i--){
        int x = query(v[i]);
        r[x] = i;
        update(x, -1);
    }
    for (int i = 1; i <= n; i++){
        cout<<r[i]<<"\n";
    }
}