Pagini recente » Cod sursa (job #2999196) | Cod sursa (job #2737533) | Cod sursa (job #3038876) | Cod sursa (job #2449980) | Cod sursa (job #3259938)
#include <bits/stdc++.h>
using namespace std;
string nume="schi";
ifstream in(nume+".in");
ofstream out(nume+".out");
#define cin in
#define cout out
int st[150005];
void update(int node, int st, int dr, int poz, int val)
{
if(st==dr)
{
st[node]+=val;
return;
}
int mid=(st+dr)/2;
if(poz<=mid)
{
update(2*node, st, mid, poz, x);
}
else
{
update(2*node+1, mid+1, dr, poz, x);
}
st[node]=st[2*node]+st[2*node+1];
}
int query(int node, int st, int dr, int val)
{
if(st==dr) return st;
int mid=(st+dr)/2;
if(st[2*node]<val)
return query(2*node+1, mid+1, dr, val-st[2*node]);
else
return query(2*node, st, mid, val);
}
int v[150005];
int ans[150005];
int main()
{
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>v[i];
update(1, 1, n, i, 1);
}
for(int i=n; i>=1; i--)
{
int poz=query(1, 1, n, v[i]);
update(1, 1, n, poz, -1);
ans[poz]=i;
}
for(int i=1; i<=n; i++)
cout<<ans[i]<<'\n';
return 0;
}