Pagini recente » Cod sursa (job #1908084) | Cod sursa (job #2703533) | Cod sursa (job #178836) | Cod sursa (job #1029009) | Cod sursa (job #1033348)
#include <fstream>
using namespace std;
ifstream fin ("schi.in");
ofstream fout ("schi.out");
void erase(int , int , int , int s, int &);
int build(int , int , int );
int n,v[100000],z[30001];
int main()
{
int i,poz,w[30001];
fin>>n;
v[1]=build(1,n,1);
for(i=n;i>=1;i--)
fin>>w[i];
for(i=1;i<=n;i++)
{
erase(1,n,1,w[i],poz);
z[poz]=n-i+1;
}
for(i=1;i<=n;i++)
fout<<z[i]<<"\n";
return 0;
}
void erase(int li, int ls, int i, int s, int &a)
{
if(li==ls)
{
v[i]=0;
a=li;
return;
}
int mij=(li+ls)/2;
if(s>v[2*i])
{
v[2*i+1]--;
erase(mij+1,ls,2*i+1,s-v[2*i],a);
}
else
{
v[2*i]--;
erase(li,mij,2*i,s,a);
}
return;
}
int build(int li, int ls, int i)
{
if(li==ls)
{
v[i]=1;
return v[i];
}
v[i]=build(li,(li+ls)/2,2*i)+build((li+ls)/2+1,ls,2*i+1);
return v[i];
}