Pagini recente » Cod sursa (job #1663685) | Cod sursa (job #1274977) | Cod sursa (job #2472512) | Cod sursa (job #655099) | Cod sursa (job #1250718)
#include <cstdio>
#define SIZE 30005
int n, v[SIZE];
int aib[SIZE], sol[SIZE];
void update(int x){
for (; x<=n; x+=x&(x-1)^x)
++aib[x];
}
int query(int x){
int sum = 0;
for (; x; x-=x&(x-1)^x)
sum += aib[x];
return sum;
}
int bsearch(int val){
int st = 1, dr = n, p=n+1;
while (st <= dr) {
int mij = st + (dr-st)/2;
int v = query(mij);
if (query(mij) == val) {
p = mij;
dr = mij - 1;
} else {
if (v > val)
dr = mij - 1;
else
st = mij + 1;
}
}
return p;
}
int main()
{
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
scanf("%d", &n);
for (int i=1; i<=n; ++i){
scanf("%d", &v[i]);
}
for (int i=n; i; --i){
int pos = bsearch(v[i]);
sol[pos] = i;
update(pos);
}
for (int i=1; i<=n; ++i){
printf("%d\n", sol[i]);
}
return 0;
}