Pagini recente » Cod sursa (job #2438332) | Cod sursa (job #2981582) | Cod sursa (job #1584017) | Cod sursa (job #997819) | Cod sursa (job #1400588)
#include <cstdio>
#define NMAX 30005
using namespace std;
bool ok=1;
int n,poz,val,a[NMAX];
int sol[NMAX],tree[NMAX];
inline void update(int nod,int st,int dr)
{
if (st==dr)tree[nod]=ok;
else
{
int m=(st+dr)>>1;
if (poz<=m)update(2*nod,st,m);
else update(2*nod+1,m+1,dr);
tree[nod]=tree[2*nod]+tree[2*nod+1];
}
}
inline int query(int nod,int st,int dr)
{
if (st==dr)return st;
int m=(st+dr)>>1;
if (tree[2*nod]>=val)
return query(2*nod,st,m);
val-=tree[2*nod];
return query(2*nod+1,m+1,dr);
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
poz=i;
update(1,1,n);
}
ok=0;
for (int i=n;i;i--)
{
val=a[i];
poz=query(1,1,n);
sol[poz]=i;
update(1,1,n);
}
for (int i=1;i<=n;i++)printf("%d\n",sol[i]);
fclose(stdin);
fclose(stdout);
}