Pagini recente » Cod sursa (job #1301517) | Cod sursa (job #717929) | Cod sursa (job #1252128) | Cod sursa (job #2266943) | Cod sursa (job #3332333)
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int Nmax = 3e5;
int n, aib[Nmax + 5], sol[Nmax + 5], v[Nmax + 5];
void update(int p, int val)
{
for (; p <= n; p += p & -p)
aib[p] += val;
}
int bs(int val)
{
int sum = 0, pos = 0;
for (int step = 1 << 19; step; step >>= 1)
if (pos + step <= n && sum + aib[pos + step] < val)
{
pos += step;
sum += aib[pos];
}
return pos + 1;
}
int32_t main()
{
cin >> n;
for(int i = 1; i <= n; i++)
cin >> v[i];
for(int i = 1; i <= n; i++)
update(i, 1);
for(int i = n; i >= 1; i--)
{
int p = bs(v[i]);
sol[p] = i;
update(p, -1);
}
for (int i = 1; i <= n; i++)
cout << sol[i] << "\n";
}