Cod sursa(job #2189243)

Utilizator mateicosCostescu Matei mateicos Data 27 martie 2018 21:10:57
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>

using namespace std;

short sol[30005];
short v[30005];
short aib[30005], n;

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

int main()
{
    freopen("schi.in", "r", stdin);
    freopen("schi.out", "w", stdout);
    int i, p2, k, j;
    scanf("%d", &n);
    for(i = 1;i <= n;i++){
      scanf("%hd", &v[i]);
      update(i, 1);
    }
    p2 = 1;
    while(p2 * 2 <= n)
      p2 *= 2;
    for(i = n;i > 0;i--){
      k = 0;
      for(j = p2;j > 0;j /= 2){
        if(k + j <= n && aib[j + k] < v[i]){
          k += j;
          v[i] -= aib[k];
        }
      }
      k++;
      update(k, -1);
      sol[k] = i;
    }
    for(i = 1;i <= n;i++){
      printf("%hd\n", sol[i]);
    }
    return 0;
}