Cod sursa(job #1841552)

Utilizator enescu_rEnescu Radu enescu_r Data 5 ianuarie 2017 18:49:07
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>
#define maxN 30005
using namespace std;
int i, n, v[maxN], ai[maxN * 4], win[maxN];

void update(int node, int l, int r, int pos, int i)
{
   int mid, lson = 2 * node, rson = 2 * node + 1;
   if (l == r)
   {
       ai[node] = 1;
       win[l] = i;
       return ;
   }
   mid = (l + r) / 2;
   if (mid - l + 1 - ai[lson] >= pos)
        update(lson, l, mid, pos, i);
   else
        update(rson, mid + 1, r, pos - (mid - l + 1 - ai[lson]), i);
   ai[node] = ai[lson] + ai[rson];
}

int main()
{
    freopen("schi.in", "r", stdin);
    freopen("schi.out", "w", stdout);
    scanf("%d", &n);
    for (i = 1; i <= n; ++ i)
        scanf("%d", &v[i]);
    for (i = n; i >= 1; -- i)
            update(1, 1, n, v[i], i);
    for (i = 1; i <= n; ++ i)
        printf("%d\n", win[i]);
    return 0;
}