Pagini recente » Cod sursa (job #2347001) | Cod sursa (job #1757505) | Cod sursa (job #1790105) | Cod sursa (job #2502558) | Cod sursa (job #3259955)
#include <fstream>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
int v[30005], ans[30005], st[120005];
void update(int nod, int from, int to, int poz, int val){
if(from == to){
st[nod] += val;
return;
}
int mid = (from + to) / 2;
if(poz <= mid){
update(nod * 2, from, mid, poz, val);
}else{
update(nod * 2 + 1, mid + 1, to, poz, val);
}
st[nod] = st[nod * 2] + st[nod * 2 + 1];
}
int query(int nod, int l, int r, int val){
int sum = 0;
if(l==r){
return l;
}
int mid = (l+r) / 2;
nod*=2;
if(st[nod]<val)
{
return query(nod+1, mid+1, r, val-st[nod]);
}
return query(nod, l, mid, val);
}
int main()
{
int n, x;
cin >> n;
for(int i=1;i<=n;i++)
{
cin >> v[i];
update(1, 1, n, i, 1);
}
for(int i = n; i > 0; i--){
x=query(1, 1, n, v[i]);
ans[x]=i;
update(1, 1, n, x, -1);
}
for(int i=1; i<=n; i++)
{
cout<<ans[i]<<'\n';
}
return 0;
}