Pagini recente » Cod sursa (job #1687057) | Cod sursa (job #2092443) | Cod sursa (job #1710832) | Cod sursa (job #1505708) | Cod sursa (job #2011515)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int Nmax = 30000 + 5;
int a[Nmax], poz[Nmax], arb[4 * Nmax], n, pozitie;
void build(int nod, int left, int right)
{
int mid = left + (right - left) / 2;
if(left == right)
{
arb[nod] = 1;
return;
}
build(2 * nod, left ,mid);
build(2 * nod + 1,mid + 1, right);
arb[nod] = arb[2* nod] + arb[2 * nod + 1];
}
void upd(int nod, int left, int right, int rest)
{
int mid = left +(right - left) / 2;
if(left == right)
{
arb[nod] = 0;
pozitie = left;
return;
}
if(rest > arb[2 * nod])upd(2 * nod + 1, mid + 1 ,right , rest - arb[2 * nod]);
else upd(2 * nod, left, mid, rest);
arb[nod] = arb[2 * nod] + arb[2 * nod + 1];
}
int main()
{
fin >> n;
build(1, 1, n);
for(int i = 1; i <= n; ++i)fin >> a[i];
for(int i = n; i >= 1; --i)
{
upd(1, 1, n, a[i]);
poz[pozitie] = i;
}
for(int i = 1; i <= n; ++i)
fout << poz[i] << '\n';
return 0;
}