Pagini recente » Cod sursa (job #1197795) | Cod sursa (job #2184396) | Cod sursa (job #1524981) | Cod sursa (job #2528744) | Cod sursa (job #2209853)
#include <bits/stdc++.h>
using namespace std;
int n, v[30005], aib[30005], sol[30005];
void update(int idx, int val)
{
while(idx <= n){
aib[idx] += val;
idx += (idx&(-idx));
}
}
int read(int idx)
{
int sum = 0;
while(idx){
sum += aib[idx];
idx -= (idx&(-idx));
}
return sum;
}
int main()
{
ifstream fin ("schi.in");
ofstream fout ("schi.out");
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> v[i];
for (int i = n; i >= 1; --i){
int x = v[i];
int lo = 1, hi = n, m, ans;
while(lo <= hi){
m = (lo+hi)>>1;
if(m-read(m) >= x){
ans = m;
hi = m-1;
}else lo = m+1;
}
sol[ans] = i;
update(ans, 1);
}
for (int i = 1; i <= n; ++i)
fout << sol[i] << "\n";
return 0;
}