Pagini recente » Cod sursa (job #1179018) | Cod sursa (job #458024) | Cod sursa (job #355498) | Cod sursa (job #848490) | Cod sursa (job #1142209)
#include <cstdio>
#define ub(x) (x&(-x))
using namespace std;
int st,dr,m,n,aib[30004],x,i,p,y[30004],d[30004],j;
int a (int x)
{
int i,s;
s=0;
for (i=x;i>0;i-=ub(i))
s+=aib[i];
return s;
}
void b (int x)
{
for (i=x;i<=n;i+=ub(i))
aib[i]--;
}
int cautare (int x)
{
int st,dr,m;
st=1;
dr=n;
while (st<=dr)
{
m=(st+dr)/2;
if (a(m)<x)
st=m+1;
else
dr=m-1;
}
b(dr+1);
return dr+1;
}
int main()
{
freopen ("schi.in","r",stdin);
freopen ("schi.out","w",stdout);
scanf ("%d", &n);
for (i=1;i<=n;i++)
scanf ("%d", &d[i]);
for (i=1;i<=n;i++)
aib[i]=ub(i);
for (j=n;j>=1;j--)
y[cautare(d[j])]=j;
for (i=1;i<=n;i++)
printf ("%d\n", y[i]);
return 0;
}