Pagini recente » Cod sursa (job #1495065) | Cod sursa (job #173059) | Cod sursa (job #1031319) | Cod sursa (job #2102592) | Cod sursa (job #35281)
Cod sursa(job #35281)
#include <stdio.h>
#define MAX_N 30005
#define FIN "schi.in"
#define FOUT "schi.out"
#define LSB(x) (((x) & (x - 1)) ^ (x))
int N, A[MAX_N], T[MAX_N], P[MAX_N];
void update(long n)
{
for (; n <= N; n += LSB(n))
T[n]++;
}
int query(long n)
{
int t = n;
for (n--; n > 0; n -= LSB(n))
t -= T[n];
return t;
}
int main(void)
{
int i, j, k, a;
long step;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &N);
for (i = 0; i < N; i++)
scanf("%d", A + i);
for (step = 1; step < (long) N; step <<= 1);
if (step > N) step >>= 1;
for (i = N - 1; i >= 0; i--)
{
for (a = A[i], j = 1, k = step; k; k >>= 1)
if (j + k <= N && query(j + k) <= a) j += k;
P[j] = i + 1;
update(j);
}
for (i = 1; i <= N; i++)
printf("%d\n", P[i]);
return 0;
}