Pagini recente » Cod sursa (job #2351483) | Cod sursa (job #738357) | Cod sursa (job #2176683) | Cod sursa (job #1885334) | Cod sursa (job #856884)
Cod sursa(job #856884)
#include <cstdio>
#define nmax 30001
using namespace std;
int a[65537], pos[nmax], board[nmax], n, i;
void buildTree(int nod, int stg, int dpt)
{
if (stg == dpt)
{
a[nod] = 1;
return;
}
int m=(stg+dpt)>>1, fs=nod<<1;
int fd = 1+fs;
buildTree(fs, stg, m);
buildTree(fd, m+1, dpt);
a[nod] = a[fs] + a[fd];
}
void query(int q, int nod, int stg, int dpt)
{
if (stg == dpt)
{
board[stg] = i;
a[nod] = 0;
return;
}
int m=(stg+dpt)>>1, fs=nod<<1;
int fd = 1+fs;
if (q <= a[fs])
query(q, fs, stg, m);
else
query(q-a[fs], fd, m+1, dpt);
--a[nod];
}
int main()
{
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
scanf("%d", &n);
for (i=1; i<=n; ++i)
scanf("%d", &pos[i]);
buildTree(1, 1, n);
for (i=n; i>0; --i)
query(pos[i], 1, 1, n);
for (i=1; i<=n; ++i)
printf("%d\n", board[i]);
return 0;
}