Pagini recente » Cod sursa (job #1628499) | Cod sursa (job #2433137) | Cod sursa (job #984493) | Cod sursa (job #682421) | Cod sursa (job #768824)
Cod sursa(job #768824)
#include<fstream>
#define maxn 30005
using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");
int arb[maxn*4+65],sol[maxn],a[maxn];
int n,val,poz,rez;
void update(int nod,int left,int right)
{
if(left==right)
{
arb[nod]=val;
return;
}
int mid=(left+right)/2;
if(poz<=mid) update(2*nod,left,mid);
else update(2*nod+1,mid+1,right);
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
void query(int nod,int left,int right)
{
if(left==right)
{
rez=left;
return;
}
int mid=(left+right)/2;
if(val<=arb[2*nod]) query(2*nod,left,mid);
else
{
val-=arb[2*nod];
query(2*nod+1,mid+1,right);
}
}
void read()
{
in>>n;
for(int i=1;i<=n;i++)
{
in>>a[i];
poz=i;
val=1;
update(1,1,n);
}
}
int main()
{
read();
for(int i=n;i>=1;i--)
{
val=a[i];
query(1,1,n);
sol[rez]=i;
poz=rez,val=0;
update(1,1,n);
}
for(int i=1;i<=n;i++)
out<<sol[i]<<"\n";
}