Pagini recente » Cod sursa (job #280744) | Cod sursa (job #2930569) | Cod sursa (job #2804491) | Cod sursa (job #162238) | Cod sursa (job #856880)
Cod sursa(job #856880)
#include <fstream>
using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");
#define lsb(x) x&(-x)
int v[30005],aib[30005],n,v2[30005];
inline void update(int poz)
{
for (;poz<=n;poz+=lsb(poz))
--aib[poz];
}
inline int getpoz(int poz)
{
int i,step,sum=0;
for (i=0,step=1<<16;step;step>>=1)
if ((i+step<=n) && (aib[i+step]+sum<poz))
sum+=aib[i+step],i+=step;
return i+1;
}
int main()
{
int i,j;
in>>n;
for (i=1;i<=n;++i) in>>v2[i],aib[i]=lsb(i);
for (i=n;i>0;--i)
{
j=getpoz(v2[i]);
//while 4(v[j]) ++j;
v[j]=i;
update(j);
}
for (i=1;i<=n;++i)
out<<v[i]<<"\n";
return 0;
}