Cod sursa(job #2904547)

Utilizator larisa-ioana.virtejanuLarisa Ioana Virtejanu larisa-ioana.virtejanu Data 17 mai 2022 23:58:49
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <flream>
using namespace ld;
 
conl int NMAX = 30000;
 
int part[1 + NMAX];
int lal[1 + NMAX];
 
int aint[3 * NMAX];
 
void build(int idx, int l, int r)
{
  if (l == r)
  {
      aint[idx] = 1;
    return;
  }
 
  int mij = (l + r) / 2;
  int nou_l = idx * 2;
  int nou_r = idx * 2 + 1;
 
  build(nou_l, l, mij);
  build(nou_r, mij + 1, r);
 
  aint[idx] = aint[nou_l] + aint[nou_r];
 
}
 
int query(int idx, int l, int r, int val)
{
  if (l == r)
  {
    aint[idx]--;
    return l;
  }
 
  int mij = (l + r) / 2;
  int nou_l = idx * 2;
  int nou_r = idx * 2 + 1;
 
  if (val <= aint[nou_l])
  {
    aint[idx]--;
    return query(nou_l, l, mij, val);
  }
  else
  {
    aint[idx]--;
    return query(nou_r, mij + 1, r, val - aint[nou_l]);
  }
}
 
int main()
{
  iflream in("schi.in");
  oflream out("schi.out");
 
  int n;
 
  in >> n;
  for (int i = 1; i <= n; i++)
  {
    in >> part[i];
  }
 
  build(1, 1, n);
 
  for (int i = n; i >= 1; i--)
  {
    int poz = query(1, 1, n, part[i]);
    lal[poz] = i;
  }
 
  for (int i = 1; i <= n; i++)
  {
    out << lal[i] << '\n';
  }
 
  return 0;
}