Pagini recente » Cod sursa (job #1611891) | Cod sursa (job #1855323) | Cod sursa (job #885754) | Cod sursa (job #2407570) | Cod sursa (job #595230)
Cod sursa(job #595230)
#include <cstdio>
#define MAXN 30010
#define mid ((st + dr) >> 1)
#define fs 2 * node
#define fd 2 * node + 1
using namespace std;
int Aint[MAXN * 4];
int VPos[MAXN], VSol[MAXN], resQ, N;
void buildAint(int node, int st, int dr)
{
if(st == dr)
{
Aint[node] = 1;
return ;
}
buildAint(fs, st, mid);
buildAint(fd, mid + 1, dr);
Aint[node] = Aint[fs] + Aint[fd];
}
void queryAint(int node, int st, int dr, int val)
{
Aint[node] -= 1;
if(st == dr)
{
resQ = st;
return ;
}
if(Aint[fs] >= val)
queryAint(fs, st, mid, val);
else queryAint(fd, mid + 1, dr, val - Aint[fs]);
}
int main () {
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
scanf("%d\n", &N);
int i;
for(i = 1; i <= N; i++)
scanf("%d\n", &VPos[i]);
buildAint(1, 1, N);
for(i = N; i >= 1; i--) {
// printf("%d\n", Aint[1]);
queryAint(1, 1, N, VPos[i]);
VSol[resQ] = i;
}
for(i = 1; i <= N; i++)
printf("%d\n", VSol[i]);
return 0;
}