Pagini recente » Cod sursa (job #826188) | Cod sursa (job #2348575) | Cod sursa (job #1373778) | Monitorul de evaluare | Cod sursa (job #2060970)
#include<fstream>
#include<iostream>
#define DN 120005
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
short n,r[DN],x[DN],rez[DN],poz,v;
short s[DN];
void update1(int nod,int st,int dr)
{
if(st==dr)
{
r[nod]=1;
return;
}
int mij=(st+dr)/2;
if(poz<=mij)
update1(2*nod,st,mij);
else
update1(2*nod+1,mij+1,dr);
r[nod]=r[2*nod]+r[2*nod+1];
}
void update2(int nod,int st,int dr)
{
if(st==dr)
{
// cout<<poz<<' '<<st<<'\n';
r[nod]=0;
rez[st]=poz;
return;
}
int mij=(st+dr)/2;
if(r[2*nod]>=v)
update2(2*nod,st,mij);
else
{
v-=r[2*nod];
update2(2*nod+1,mij+1,dr);
}
r[nod]=r[2*nod]+r[2*nod+1];
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>x[i];
for(int i=1;i<=n;i++)
{
poz=i;
v=i;
update1(1,1,n);
}
for(int i=n;i>=1;i--)
{
v=x[i];
poz=i;
update2(1,1,n);
}
for(int i=1;i<=n;i++)
fout<<rez[i]<<'\n';
}