Cod sursa(job #3335002)

Utilizator hrib_the_slothAndreea Pasca hrib_the_sloth Data 21 ianuarie 2026 02:08:01
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <bits/stdc++.h>
using namespace std;
typedef long long i8;

ifstream fin("ski.in");
ofstream fout("ski.out");
class AINT {
 private:
  vector<int> v;
  vector<int> res;
  int n;

  void build(int node, int st, int dr) {
    if (st == dr) {
      v[node] = 1;
    } else {
      int mid = (st + dr) / 2;
      build(node * 2, st, mid);
      build(node * 2 + 1, mid + 1, dr);
      v[node] = v[node * 2] + v[node * 2 + 1];
    }
  }

 public:
  void strt(int node) {
    n = node;
    v.assign(4 * n, 0);
    res.assign(n, 0);
    build(1, 0, n - 1);
  };

  void update(int node, int st, int dr, int e, int poz) {
    if (st == dr) {
      res[st] = e;
      v[node] = 0;
      return;
    }
    int mid = (st + dr) / 2;
    if (poz < v[node * 2]) {
      update(node * 2, st, mid, e, poz);
    } else {
      update(node * 2 + 1, mid + 1, dr, e, poz - v[node * 2]);
    }
    v[node] = v[node * 2] + v[node * 2 + 1];
  }

  void wrt() {
    for (int i = 0; i < n; i++) {
      fout << res[i] << "\n";
    }
  }
};

int main() {
  int n;
  cin >> n;

  AINT seg;
  seg.strt(n);

  vector<int> a(n);
  for (int i = 0; i < n; i++) {
    fin >> a[i];
  }

  for (int i = n - 1; i >= 0; i--) {
    seg.update(1, 0, n - 1, i + 1, a[i] - 1);
  }

  seg.wrt();
  return 0;
}