Pagini recente » Cod sursa (job #309052) | Cod sursa (job #2910638) | Cod sursa (job #2633272) | Cod sursa (job #518450) | Cod sursa (job #2189243)
#include <cstdio>
using namespace std;
short sol[30005];
short v[30005];
short aib[30005], n;
void update(int i, int x){
while(i <= n){
aib[i] += x;
i += i&-i;
}
}
int main()
{
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
int i, p2, k, j;
scanf("%d", &n);
for(i = 1;i <= n;i++){
scanf("%hd", &v[i]);
update(i, 1);
}
p2 = 1;
while(p2 * 2 <= n)
p2 *= 2;
for(i = n;i > 0;i--){
k = 0;
for(j = p2;j > 0;j /= 2){
if(k + j <= n && aib[j + k] < v[i]){
k += j;
v[i] -= aib[k];
}
}
k++;
update(k, -1);
sol[k] = i;
}
for(i = 1;i <= n;i++){
printf("%hd\n", sol[i]);
}
return 0;
}