Pagini recente » Cod sursa (job #2240797) | Cod sursa (job #2921226) | Cod sursa (job #2973639) | Cod sursa (job #3258000) | Cod sursa (job #3259943)
#include <fstream>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
//#pragma GCC optimize ("O3")
int st[120005], v[30005], rez[30005];
void update(int node, int from, int to, int poz, int val)
{
if(from==to)
{
st[node]+=val;
return;
}
int mid=(from+to)/2;
if(poz<=mid)
{
update(node*2, from, mid, poz, val);
}
else
{
update(node*2+1, mid+1, to, poz, val);
}
st[node]=st[node*2]+st[node*2+1];
}
int query(int nod, int lf, int dr, int val)
{
int smin=0;
if(lf==dr)
return lf;
int mid=(lf+dr)/2;
nod*=2;
if(st[nod]<val)
{
return query(nod+1, mid+1, dr, val-st[nod]);
}
return query(nod, lf, mid, val);
}
int main()
{
int n, a;
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--)
{
a=query(1, 1, n, v[i]);
update(1, 1, n, a, -1);
rez[a]=i;
}
for(int i=1; i<=n; i++)
{
cout<<rez[i]<<'\n';
}
return 0;
}