Cod sursa(job #3208096)

Utilizator gBneFlavius Andronic gBne Data 27 februarie 2024 18:48:36
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMax = 30005;

int n, AIB[NMax], C[NMax];
stack<pair<int,int>> s;

void update(int poz, int val){
    for(int i=poz; i<=n; i+=(i & -i)){
        AIB[i] += val;
    }
}


int query(int val){
    int ans = 0;
    int p2max = (1 << 17);
    for(int i=p2max; i>0; i>>=1){
        if(ans + i <= n){
            if(AIB[ans + i] < val){
                ans += i;
                val -= AIB[ans];
            }
        }
    }
    return ans + 1;
}


int main()
{
    fin >> n;
    for(int x, i=1; i<=n; i++){
        fin >> x;
        s.push(make_pair(x, i));
        update(i, 1);
    }
    while(!s.empty()){
        int pozClas = s.top().first;
        int IDconc = s.top().second;
        int pozReal = query(pozClas);
        C[pozReal] = IDconc;
        cout << pozReal << '\n';
        update(pozReal, -1);
        s.pop();
    }
    for(int i=1; i<=n; i++){
        fout << C[i] << '\n';
    }
    return 0;
}