Pagini recente » Cod sursa (job #2503555) | Cod sursa (job #1094093) | Cod sursa (job #1866414) | Cod sursa (job #538259) | Cod sursa (job #2908539)
//these are confusing times
#include <fstream>
#include <cstdio>
#include <deque>
#include <cmath>
#include <iomanip>
#define ll long long
using namespace std;
int n;
int aib[30003];
int v[30003], ans[30003];
static inline int query(int val)
{
int ans = 0;
while (val)
{
ans += aib[val];
val -= val & -val;
}
return ans;
}
static inline void update(int poz, int val)
{
while (poz <= n)
{
aib[poz] += val;
poz += poz & -poz;
}
}
int main()
{
ifstream cin("schi.in");
ofstream cout("schi.out");
int i;
cin >> n;
for (i = 1; i <= n; i++)
cin >> v[i];
for (i = n; i >= 1; i--)
{
int med, st = 1, dr = n, sol = -1;
while (st <= dr)
{
med = ((st + dr) >> 1);
if (med - query(med) >= v[i])
{
sol = med;
dr = med - 1;
}
else
st = med + 1;
}
ans[sol] = i;
update(sol, 1);
}
//cout << "\n\n";
for (i = 1; i <= n; i++)
cout << ans[i] << "\n";
}