Cod sursa(job #1761621)

Utilizator c0mradec0mrade c0mrade Data 22 septembrie 2016 16:55:04
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");

int n,i,t[30010],ans[30010],v[120010];

void update(int nod, int st, int dr, int poz, int x)
{
    if(st==dr)
    {
        v[nod]=x;
        return;
    }
    int mid=(st+dr)>>1;
    if(poz<=mid)
        update(2*nod, st, mid, poz, x);
    else
        update(2*nod+1, mid+1, dr, poz, x);

    v[nod] = v[2*nod] + v[2*nod+1];
}

void query(int nod, int st, int dr, int x)
{
    if(st==dr)
    {
        v[nod]=0;
        ans[st]=i;
        return;
    }
    int mid=(st+dr)>>1;
    if(x <= v[2*nod])
        query(2*nod, st, mid, x);
    else
        query(2*nod+1, mid+1, dr, x-v[2*nod]);
    v[nod]=v[2*nod]+v[2*nod+1];
}

int main()
{
    f>>n;
    for(i=1;i<=n;++i)
    {
        f>>t[i];
        update(1, 1, n, i, 1);
    }
    for(i=n;i;--i)
        query(1, 1, n, t[i]);
    for(i=1;i<=n;++i)
        g<<ans[i]<<'\n';

    return 0;
}