Pagini recente » Cod sursa (job #3229159) | Cod sursa (job #2517641) | Cod sursa (job #1020796) | Cod sursa (job #2089862) | Cod sursa (job #1425478)
#include <cstdio>
using namespace std;
const int NMAX=30000;
int p[NMAX+5],aib[NMAX+5],sol[NMAX+5],n;
inline void update(int poz)
{
for( ; poz<=n; poz+=poz&-poz)
++aib[poz];
}
inline int find(int k)
{
int last,s,f,poz,query_poz,kk;
for(register int i=(1<<15),s=0,f=0; i>=1; i>>=1)
if (s+i<=n)
{
poz=s+i;
query_poz=f+aib[poz];
kk=poz-query_poz;
if (kk<k)
{
s+=i;
f+=aib[s];
}
else
if (kk==k)
last=s+i;
}
return last;
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
int poz;
scanf("%d",&n);
for(register int i=1; i<=n; ++i)
scanf("%d",&p[i]);
for(register int i=n; i>=1; --i)
{
poz=find(p[i]);
sol[poz]=i;
update(poz);
}
for(register int i=1; i<=n; ++i)
printf("%d\n",sol[i]);
return 0;
}