Pagini recente » Cod sursa (job #787204) | Cod sursa (job #2086908) | Cod sursa (job #2427286) | Cod sursa (job #1675373) | Cod sursa (job #1425696)
#include <cstdio>
#include <cstring>
#include <algorithm>
#define Nmax 30004
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
int n, i, j, v[Nmax], aib[Nmax], sol[Nmax], poz;
void add(int x, int y)
{
int i;
for (i = x; i <= n; i += zeros(i) )
aib[i] += y;
}
int sum(int x)
{
int i, suma = 0;
for (i = x; i >= 1; i -= zeros (i))
suma += aib[i];
return suma;
}
int cb(int x)
{
int i = 0,pas = 1 << 14;
while (pas)
{
if (i + pas <= n && sum(i + pas) <= x)
i += pas;
pas /= 2;
}
return i + 1;
}
int main()
{
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
scanf("%d", &n);
for (i = 1; i <= n; ++i)
{
scanf("%d", &v[i]);
}
for (i = 1; i <= n; ++i)
add(i, 1);
for (i = n; i >= 1; --i)
{
-- v[i];
poz = cb(v[i]);
add(poz, -1);
sol[poz] = i;
}
for (i = 1; i <= n; ++i)
printf("%d\n", sol[i]);
return 0;
}