Pagini recente » Cod sursa (job #953069) | Cod sursa (job #1013516) | Cod sursa (job #1190039) | Cod sursa (job #137794) | Cod sursa (job #1691271)
#include <bits/stdc++.h>
#define Nmax 30002
FILE *fin = freopen("schi.in", "r", stdin);
FILE *fout = freopen("schi.out", "w", stdout);
using namespace std;
int n, pos[Nmax], aib[Nmax], sol[Nmax];
void update(int pos, int val)
{
do
{
aib[pos] += val;
pos += pos & -pos;
}
while(pos <= n);
}
int bsearch(int x)
{
int i = 0, p = 1 << 15;
while(p)
{
if(i + p <= n && aib[i + p] < x)
{
i += p;
x -= aib[i];
}
p >>= 1;
}
return i + 1;
}
void read()
{
scanf("%d", &n);
for(int i = 1; i <= n; ++ i)
scanf("%d", &pos[i]);
}
void solve()
{
int i, k;
/// initialize aib
for(i = 1; i <= n; ++ i)
update(i, 1);
for(i = n; i >= 1; -- i)
{
k = bsearch(pos[i]);
sol[k] = i;
update(k, -1);
}
}
void write()
{
for(int i = 1; i <= n; ++ i)
printf("%d\n", sol[i]);
}
int main()
{
read();
solve();
write();
return 0;
}