Pagini recente » Cod sursa (job #1832077) | Cod sursa (job #2401413) | Cod sursa (job #812028) | Cod sursa (job #1649662) | Cod sursa (job #459632)
Cod sursa(job #459632)
#include <cstdio>
#define nmax 30010
int n, m, k, p, v[nmax], sol[nmax], d[nmax];
int query(int poz)
{
int r=0;
for (; poz; poz &= poz-1) r+=v[poz];
return r;
}
int search(int a, int b)
{
int x;
m=0;
while (a<=b)
{
m=(a+b)/2;
if (m==1) x=d[k]; else
x=query(m-1)+d[k];
if (x<m) b=m-1; else
if (x>m) a=m+1; else break;
}
while (sol[m]) m++;
return m;
}
void update(int poz)
{
for (; poz<=n; poz += (poz & (poz-1))^poz)
v[poz]++;
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
int i;
for (i=1; i<=n; i++) scanf("%d",&d[i]);
for (k=n; k>0; k--)
{
p=search(1,n);
update(p);
sol[p]=k;
}
for (i=1; i<=n; i++) printf("%d\n",sol[i]);
}