Pagini recente » Cod sursa (job #1826382) | Cod sursa (job #2484358) | Cod sursa (job #1439171) | Cod sursa (job #1619004) | Cod sursa (job #3155448)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
std::vector < int > aib;
void update(int pos, int val) {
while(pos <= aib.size())
{
aib[pos] += val;
pos += pos & -pos;
}
}
int patrascu(int val) {
int pos = 0;
int bit = aib.size();
while(bit & (bit - 1)) {
bit &= bit - 1;
}
for (; bit; bit >>= 1) {
if ((pos | bit) < aib.size() && aib[pos | bit] < val) {
pos |= bit;
val -= aib[pos];
}
}
return pos + 1;
}
int main()
{
int n, a;
cin >> n;
aib.resize(n);
std::vector < int > pos(n + 1);
for(int i = 1; i <= n; i++)
{
cin >> pos[i];
update(i, 1);
}
std::vector < int > ans(n + 1);
for (int i = n; i > 0; i--) {
int cls = patrascu(pos[i]);
ans[cls] = i;
update(cls, -1);
}
for(int i = 1; i <= n; i++)
{
cout << ans[i] << '\n';
}
return 0;
}