Pagini recente » Cod sursa (job #680398) | Cod sursa (job #2926061) | Cod sursa (job #1647919) | Cod sursa (job #607249) | Cod sursa (job #2922497)
#include <fstream>
using namespace std;
ifstream in ("schi.in");
ofstream out ("schi.out");
const int max_size = 3e4 + 1, max_aint = 12e4 + 1;
int a[max_size], ans[max_size], aint[max_aint];
void init (int l, int r, int nod)
{
if (l == r)
{
aint[nod] = 1;
}
else
{
int m = (l + r) / 2;
init(l, m, 2 * nod);
init(m + 1, r, 2 * nod + 1);
aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}
}
void update (int l, int r, int nod, int poz, int ind)
{
if (l == r)
{
ans[l] = ind;
aint[nod] = 0;
}
else
{
int m = (l + r) / 2;
if (poz <= aint[2 * nod])
{
update(l, m, 2 * nod, poz, ind);
}
else
{
update(m + 1, r, 2 * nod + 1, poz - aint[2 * nod], ind);
}
aint[nod] = aint[2 * nod] + aint[2 * nod + 1];
}
}
int main ()
{
int n;
in >> n;
init(1, n, 1);
for (int i = 1; i <= n; i++)
{
in >> a[i];
}
for (int i = n; i > 0; i--)
{
int poz = a[i], ind = i;
update(1, n, 1, poz, ind);
}
for (int i = 1; i <= n; i++)
{
out << ans[i] << '\n';
}
in.close();
out.close();
return 0;
}