Pagini recente » Cod sursa (job #1499535) | Cod sursa (job #1662201) | Cod sursa (job #1212671) | Cod sursa (job #2112608) | Cod sursa (job #1183538)
#include <cstdio>
#define su(x) (x&(-x))
using namespace std;
int v[30010], n, aib[30010], rez[30010];
void add (int i, int x)
{
for (; i <= n; i += su(i))
aib[i] += x;
}
int sum (int i)
{
int rez = 0;
for (; i; i -= su(i))
rez += aib[i];
return rez;
}
int cautbin (int x)
{
int a = 1, b = n;
while (a <= b)
{
int m = (a + b) / 2;
if (x <= sum (m)) b = m - 1;
else a = m + 1;
}
return a;
}
int main ()
{
freopen ("schi.in", "r", stdin);
freopen ("schi.out", "w", stdout);
scanf ("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf ("%d", &v[i]);
add (i, 1);
}
for (int i = n; i; i--)
{
int poz = cautbin (v[i]);
rez[poz] = i;
add (poz, -1);
}
for (int i = 1; i <= n; i++)
printf ("%d\n", rez[i]);
return 0;
}