Pagini recente » Cod sursa (job #83102) | Borderou de evaluare (job #2538114) | Cod sursa (job #3325614) | Cod sursa (job #3337801) | Cod sursa (job #3336611)
#include <bits/stdc++.h>
using namespace std;
int n, aib[30001], sol[30001], v[30001],x;
ifstream fin("schi.in");
ofstream fout("schi.out");
#define cin fin
#define cout fout
int find_kth(int k)
{
int pos = 0;
int step = 1;
while ((step<<1) <= n)
{
step <<= 1;
}
for (; step > 0; step >>= 1)
{
if (pos+step <= n && aib[pos+step] < k)
{
k -= aib[pos+step];
pos += step;
}
}
return pos+1;
}
void update(int start, int v)
{
for (int i = start; i <= n; i += i & -i)
aib[i] += v;
}
int main()
{
cin >> n;
for (int i = 1 ; i <= n; i++)
{
update(i,1);
cin >> v[i];
}
for (int i = n ; i >= 1; i--)
{
int pos = v[i];
int index = find_kth(pos);
update(index,-1);
sol[index] = i;
}
for (int i = 1 ; i <= n; i++)
{
cout << sol[i] << '\n';
}
}