Pagini recente » Cod sursa (job #2884323) | Borderou de evaluare (job #2296900) | Borderou de evaluare (job #1211013) | Cod sursa (job #645587) | Cod sursa (job #3141093)
#include <bits/stdc++.h>
using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");
int aib[30001], n, v[30001];
int afis[30001];
int lsb(int x)
{
return x & -x;
}
void update(int poz, int val)
{
for(; poz <= n; poz += lsb(poz))
aib[poz] += val;
}
int gaseste(int k)
{
int r = 0, pas = 1 << 14;
while(pas)
{
if(r + pas <= n && aib[r + pas] < k)
{
k -= aib[r + pas];
r += pas;
}
pas /= 2;
}
return r + 1;
}
int main()
{
in >> n;
for(int i = 1; i <= n; i++)
in >> v[i];
for(int i = 1; i <= n; i++)
aib[i] = lsb(i);
for(int i = n; i >= 1; i--)
{
int poz = gaseste(v[i]);
update(poz, -1);
afis[poz] = i;
}
for(int i = 1; i <= n; i++)
out << afis[i] << '\n';
return 0;
}