Pagini recente » Cod sursa (job #952688) | Cod sursa (job #2395951) | Cod sursa (job #1358057) | Cod sursa (job #1428662) | Cod sursa (job #1537640)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("schi.in");
ofstream fout ("schi.out");
const int maxn = 30005;
int v[4*maxn], a[maxn], b[maxn];
void build (int node, int left, int right)
{
if (left == right){
v[node] = 1;
}
else {
int middle = (left+right) / 2;
build(node * 2, left, middle);
build(node * 2 + 1, middle +1, right);
v[node] = right - left + 1;
}
}
void verif (int node, int left, int right, int poz, int x)
{
if (left == right){
v[node] = 0;
b[left] = x;
}
else {
int middle = (left+right) / 2;
if (poz <= v[node * 2]){
verif(node * 2, left, middle, poz, x);
}
else {
verif(node * 2 + 1, middle + 1, right, poz - v[node * 2], x);
}
--v[node];
}
}
int main ()
{
int n;
fin >> n;
for (int i = 1; i <= n; ++i){
fin >> a[i];
}
build(1, 1, n);
for (int i = n; i >= 1; --i){
verif(1, 1, n, a[i], i);
}
for (int i = 1; i <= n; ++i){
fout << b[i] << '\n';
}
fin.close();
fout.close();
return 0;
}