Pagini recente » Cod sursa (job #2971530) | Cod sursa (job #1466322) | Cod sursa (job #2789203) | Cod sursa (job #847558) | Cod sursa (job #1052438)
# include <cstdio>
const int N = 30000;
int t [1 << 16];
int v [N + 1];
int c [N + 1];
int start, poz, n;
void fisiere ()
{
freopen ("schi.in", "r", stdin);
freopen ("schi.out", "w", stdout);
}
void update (int p)
{
while (p != 1)
{
p /= 2;
t [p] = t [p * 2] + t [p * 2 + 1];
}
}
void calcul (int p, int st, int dr)
{
if (st == dr)
{
v [st] = start;
t [p] = 1;
update (p);
return;
}
int m = (st + dr) / 2;
if (poz <= m - st - t [2 * p] + 1)
calcul (2 * p, st, m);
else
{
poz -= m - st - t [2 * p] + 1;
calcul (2 * p + 1, m + 1, dr);
}
}
void init ()
{
int i;
fisiere ();
scanf ("%d", & n);
for (i = 1; i <= n; i ++)
scanf ("%d", & c [i]);
for (i = n; i >= 1; i --)
{
poz = c [i];
start = i;
calcul (1, 1, n);
}
}
void afis ()
{
int i;
for (i = 1; i <= n; i ++)
printf ("%d\n", v [i]);
}
int main ()
{
init ();
afis ();
return 0;
}