Cod sursa(job #1774815)

Utilizator akaprosAna Kapros akapros Data 9 octombrie 2016 14:46:23
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>
#define maxN 30002
using namespace std;
int n, v[maxN], ai[maxN * 4], winners[maxN];
void update(int node, int l, int r, int pos, int i)
{
   int lson = 2 * node, rson = 2 * node + 1;
   if (l == r)
   {
       ai[node] = 1;
       winners[l] = i;
       return ;
   }
   int 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];
}
void read()
{
    int i;
    freopen("schi.in", "r", stdin);
    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);
}
void write()
{
    int i;
    freopen("schi.out", "w", stdout);
    for (i = 1; i <= n; ++ i)
        printf("%d\n", winners[i]);
}
int main()
{
    read();
    write();
    return 0;
}