Cod sursa(job #3299283)

Utilizator 2016Teo@Balan 2016 Data 5 iunie 2025 10:58:51
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#pragma GCC optimize("Ofast")
#pragma GCC target("popcnt,avx2")
#pragma GCC optimize("unroll-loops")

#include <fstream>
#include <iostream>

using namespace std;

constexpr int NMAX = 30001;

int aib[NMAX], sol[NMAX], pozitieLibera[NMAX];
int n;

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

int query(int pos) {
  int sum = 0;
  for(int i = pos; i > 0; i -= i & -i)
    sum += aib[i];
  return sum;
}

int findKth(int k) {
  int left = 1, right = n, mid, ans = n;
  while(left <= right) {
    mid = (left + right) / 2;
    if(query(mid) >= k) {
      ans = mid;
      right = mid - 1;
    } else {
      left = mid + 1;
    }
  }
  return ans;
}

int main() {

  ios::sync_with_stdio(false);
  cin.tie(nullptr);

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

  fin >> n;
  for(int i = 1; i <= n; ++i) {
    fin >> pozitieLibera[i];
    update(i, 1); 
  }

  for(int i = n; i >= 1; --i) {
    int pos = findKth(pozitieLibera[i]);
    sol[pos] = i;         
    update(pos, -1);     
  }

  for(int i = 1; i <= n; ++i)
    fout << sol[i] << '\n';

  return 0;
}