Pagini recente » Cod sursa (job #179700) | Cod sursa (job #2493348) | Cod sursa (job #1325248) | Cod sursa (job #1912705) | Cod sursa (job #1979343)
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
#define sz size
#define pb push_back
#define mp make_pair
#define bg begin
#define nd end
using namespace std;
// #define int long long
const int maxn = 100003;
const int maxk = 1003;
const int maxb = 30003;
ifstream fin("schi.in");
ofstream fout("schi.out");
int aib[maxb];
int arr[maxb],ans[maxb];
int n;
int next(int x){
return x&-x;
}
void update(int x,int val){
for(int i=x;i<=n;i+=next(i)){
aib[i]+=val;
}
}
int query(int x){
int ret = 0;
for(int i=x;i>=1;i-=next(i)){
ret+=aib[i];
}
return ret;
}
int responde(int val){
int lo = 1;
int hi = n;
while(lo < hi){
int mid = (lo + hi) >> 1;
if(query(mid) < val){
lo = mid+1;
}
else{
hi = mid;
}
}
return lo;
}
int32_t main(){
#ifndef ONLINE_JUDGE
freopen("input.in","r",stdin);
#endif
ios_base::sync_with_stdio(false);
fin >> n;
for(int i=1;i<=n;i++){
fin >> arr[i];
update(i,1);
}
for(int i=n;i>=1;i--){
ans[responde(arr[i])] = i;
update(responde(arr[i]),-1);
}
for(int i=1;i<=n;i++){
fout << ans[i] << '\n';
}
return 0;
}