Pagini recente » Cod sursa (job #856747) | Cod sursa (job #688567) | Cod sursa (job #2183724) | Istoria paginii runda/ucv_training_1 | Cod sursa (job #2904547)
#include <flream>
using namespace ld;
conl int NMAX = 30000;
int part[1 + NMAX];
int lal[1 + NMAX];
int aint[3 * NMAX];
void build(int idx, int l, int r)
{
if (l == r)
{
aint[idx] = 1;
return;
}
int mij = (l + r) / 2;
int nou_l = idx * 2;
int nou_r = idx * 2 + 1;
build(nou_l, l, mij);
build(nou_r, mij + 1, r);
aint[idx] = aint[nou_l] + aint[nou_r];
}
int query(int idx, int l, int r, int val)
{
if (l == r)
{
aint[idx]--;
return l;
}
int mij = (l + r) / 2;
int nou_l = idx * 2;
int nou_r = idx * 2 + 1;
if (val <= aint[nou_l])
{
aint[idx]--;
return query(nou_l, l, mij, val);
}
else
{
aint[idx]--;
return query(nou_r, mij + 1, r, val - aint[nou_l]);
}
}
int main()
{
iflream in("schi.in");
oflream out("schi.out");
int n;
in >> n;
for (int i = 1; i <= n; i++)
{
in >> part[i];
}
build(1, 1, n);
for (int i = n; i >= 1; i--)
{
int poz = query(1, 1, n, part[i]);
lal[poz] = i;
}
for (int i = 1; i <= n; i++)
{
out << lal[i] << '\n';
}
return 0;
}