Pagini recente » Istoria paginii utilizator/ovidiup | Profil andrei_C1 | Cod sursa (job #1401076) | Cod sursa (job #3041444) | Cod sursa (job #2020125)
#include <iostream>
using namespace std;
#define zeros(a) (a & -a)
#define MAXN 50000
int Sol[MAXN], AIB[MAXN], Place[MAXN];
int main() {
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
int n;
cin>>n;
for(int i=1; i<=n; i++) {
cin>>Place[i];
for(int j=i; j<=n; j+=zeros(j))
AIB[j] += 1;
}
int M;
for(M=1; M<=n; M<<=1);
M>>=1;
for(int i=n; i; i--) {
int look = Place[i], sol = 0;
for(int j=M; j; j>>=1) {
if(sol + j <= n && AIB[sol + j] < look) {
sol += j;
look -= AIB[sol];
}
}
sol += 1;
Sol[sol] = i;
for(int j=sol; j<=n; j+=zeros(j))
AIB[j] -= 1;
}
for(int i=1; i<=n; i++)
cout << Sol[i] << "\n";
return 0;
}