Pagini recente » Cod sursa (job #2814540) | Cod sursa (job #2112445) | Cod sursa (job #572941) | Cod sursa (job #1126779) | Cod sursa (job #3319749)
#include <bits/stdc++.h>
using namespace std;
const int NMAX=30000;
vector<int> v, ans;
int n;
struct AINT{
int arbore[4*NMAX+5];
void update(int poz, int val, int left=1, int right=n, int node=1){
if(left==right){
arbore[node]=val;
return;
}
int mid=(left+right)/2;
if(poz<=mid){
update(poz, val, left, mid, 2*node);
}else{
update(poz, val, mid+1, right, 2*node+1);
}
arbore[node]=arbore[2*node]+arbore[2*node+1];
}
int query(int val, int left=1, int right=n, int node=1){
if(left==right){
return left;
}
int mid=(left+right)/2;
if(arbore[node]>=val){
return query(val, left, mid, 2*node);
}else{
return query(val, mid+1, right, 2*node+1);
}
}
};
int main(){
cin>>n;
v.resize(n+1);
ans.resize(n+1);
AINT aint;
for(int i=1;i<=n;i++){
cin>>v[i];
aint.update(i, 1);
}
for(int i=n;i>=1;i--){
int poz=aint.query(v[i]);
aint.update(poz, 0);
ans[poz]=i;
}
for(int i=1;i<=n;i++){
cout<<ans[i]<<'\n';
}
}