Pagini recente » Cod sursa (job #721627) | Cod sursa (job #1353912) | Cod sursa (job #2106258) | Cod sursa (job #3188959) | Cod sursa (job #3259939)
#include <bits/stdc++.h>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
int s[150005];
void update(int node, int st, int dr, int poz, int val)
{
if(st==dr)
{
s[node]+=val;
return;
}
int mid=(st+dr)/2;
if(poz<=mid)
{
update(2*node, st, mid, poz, val);
}
else
{
update(2*node+1, mid+1, dr, poz, val);
}
s[node]=s[2*node]+s[2*node+1];
}
int query(int node, int st, int dr, int val)
{
if(st==dr) return st;
int mid=(st+dr)/2;
if(s[2*node]<val)
return query(2*node+1, mid+1, dr, val-s[2*node]);
else
return query(2*node, st, mid, val);
}
int v[150005];
int ans[150005];
int main()
{
int n;
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;
}