Pagini recente » Cod sursa (job #681694) | Cod sursa (job #456032) | Cod sursa (job #2302608) | Cod sursa (job #2530852) | Cod sursa (job #2118949)
#include <cstdio>
const int MAX_N = 30000;
int n;
int AIB[1 + 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 loc = 0;
int suma = 0;
for (int step = 1 << 14; step > 0; step >>= 1)
if (loc + step <= n && suma + AIB[loc + step] < k)
{
suma += AIB[loc + step];
loc += step;
}
loc++;
return loc;
}
int main()
{
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
scanf("%d", &n);
int Loc[1 + n];
int Clasament[1 + n];
for (int i = 1; i <= n; i++)
scanf("%d", &Loc[i]);
for (int i = 1; i <= n; i++)
add(i, 1);
for (int i = n; i >= 1; i--)
{
Loc[i] = kth(Loc[i]);
Clasament[Loc[i]] = i;
add(Loc[i], -1);
}
for (int i = 1; i <= n; i++)
printf("%d\n", Clasament[i]);
return 0;
}