Pagini recente » Cod sursa (job #1576839) | Cod sursa (job #2575953) | Cod sursa (job #3157467) | Cod sursa (job #825990) | Cod sursa (job #2903301)
#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int n, m, i, op, val, poz, pozFinal;
int arbore[200010], v[500010], final[200010];
void create(int nod, int left, int right)
{
if (left == right)
{
arbore[nod] = 1;
return;
}
create(nod * 2, left, (left + right) / 2);
create(nod * 2 + 1, (left + right) / 2 + 1, right);
arbore[nod] = arbore[nod * 2] + arbore[nod * 2 + 1];
}
void update(int node, int left, int right, int val, int index)
{
if (left == right)
{
arbore[node] = 0;
final[left] = index;
return;
}
int mid = (left + right) / 2;
if (val <= arbore[node * 2])
update(2 * node, left, mid, val, index);
else
update(2 * node + 1, mid + 1, right, val - arbore[2 * node], index);
arbore[node]--;
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
fin >> v[i];
create(1, 1, n);
for (int i = n; i >= 1; i--)
update(1, 1, n, v[i], i);
for (int i = 1; i <= n; i++)
fout << final[i] << '\n';
return 0;
}