Pagini recente » Cod sursa (job #3362623) | Cod sursa (job #3362557) | Cod sursa (job #3363054) | Cod sursa (job #3363062) | Cod sursa (job #3362994)
#include <fstream>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
#define int long long
int arr[300005],finl[300005],aint[1500005],rf;
void query(int s,int r,int ind,int nd)
{
if (rf>0||aint[nd]==r-s+1) return;
if (r-s+1-aint[nd]<arr[ind])
{
arr[ind]-=r-s+1-aint[nd];
return;
}
if (s==r&&aint[nd]==0)
{
rf=s;
aint[nd]=1;
return;
}
else if (s==r) return;
int mid=(s+r)/2;
query(s,mid,ind,nd*2);
query(mid+1,r,ind,nd*2+1);
aint[nd]=aint[nd*2]+aint[nd*2+1];
}
int32_t main()
{
int n;
cin>>n;
for (int i=1; i<=n; i++) cin>>arr[i];
for (int i=n; i>0; i--)
{
rf=-1;
query(1,n,i,1);
finl[rf]=i;
}
for (int i=1; i<=n; i++) cout<<finl[i]<<"\n";
}