Pagini recente » Cod sursa (job #39721) | Cod sursa (job #127450) | Cod sursa (job #562000) | Cod sursa (job #261301) | Cod sursa (job #2035217)
#include <fstream>
#define Nmax 30011
using namespace std;
int v[Nmax],aint[2*Nmax],n,poz[Nmax];
int update (int st , int dr , int nod)
{
int mij=(st+dr)/2;
if (st==dr)
{
aint[nod]==1;
return 69;
}
else
{
v[nod]=dr-st+1;
update (st,mij,nod*2);
update (mij+1,dr,nod*2+1);
}
}
int query (int st , int dr , int nod ,int sum)
{
int mij=(st+dr)/2;
aint[nod]--;
if (st==dr)
{
return nod;
}
else
{
if (aint[2*nod]>=sum)
{
return query (st , mij , nod*2 , sum);
}
else
{
return query (mij+1 , dr , nod*2+1 , sum-v[2*nod]);
}
}
}
int main()
{
ifstream fin ("schi.in");
ofstream fout ("schi.out");
fin>>n;
update (1,n,1);
for (int i=1;i<=n;++i)
{
fin>>v[i];
}
for (int j=n; j>0;--j)
{
poz[query(1,n,1,v[j])]=j;
}
for (int i=1;i<=n;++i)
{
fout<<poz[i]<<"\n";
}
}