Pagini recente » Cod sursa (job #1200644) | Cod sursa (job #137522) | Cod sursa (job #2461194) | Cod sursa (job #404309) | Cod sursa (job #2209855)
#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;
for (m = (lo+hi)>>1; lo <= hi; m = (lo+hi)>>1){
int y = m-read(m);
if(y == x && sol[y] == 0){
ans = m;
break;
}
if(y >= 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;
}