Pagini recente » Cod sursa (job #605995) | Cod sursa (job #2246517) | Cod sursa (job #999798) | Cod sursa (job #2990351) | Cod sursa (job #2117864)
#include <stdio.h>
const int MAX_N = 30000;
int n;
int AIB[MAX_N];
int sum(int k) {
int suma = 0;
while (k > 0) {
suma += AIB[k];
k &= k - 1;
}
return suma;
}
void add(int index, int value) {
while (index <= n) {
AIB[index] += value;
index += index & -index;
}
}
int kth(int k) {
int st = 0, dr = n, loc = 0;
while (st <= dr) {
int mid = (st + dr) / 2;
int value = sum(mid);
if (value == k) {
loc = mid;
dr = mid - 1;
} else if (value < k)
st = mid + 1;
else
dr = mid - 1;
}
return loc;
}
int main() {
int i;
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
scanf("%d", &n);
int Loc[1 + n];
int Clasament[1 + n];
for (i = 1; i <= n; i++)
scanf("%d", &Loc[i]);
for (i = 1; i <= n; i++)
add(i, 1);
for (i = n; i >= 1; i--) {
Loc[i] = kth(Loc[i]);
Clasament[Loc[i]] = i;
add(Loc[i], -1);
}
for (i = 1; i <= n; i++)
printf("%d\n", Clasament[i]);
return 0;
}