Pagini recente » Cod sursa (job #1677577) | Cod sursa (job #816001) | Cod sursa (job #598535) | Cod sursa (job #2645402) | Cod sursa (job #3229191)
#include <fstream>
using namespace std;
ifstream cin ("schi.in");
ofstream cout ("schi.out");
int v[30005], st[120005], ans[30005];
void update(int l, int r, int node, int poz, int val) {
if(l == r) {
st[node] += val;
return;
}
int mid = (l+r)/2;
if(poz <= mid) update(l, mid, node*2, poz, val);
else update(mid+1, r, node*2+1, poz, val);
st[node] = st[node*2] + st[node*2+1];
}
int query(int l, int r, int node, int val) {
if(l == r)
return l;
int mid = (l+r)/2, ans;
if(st[2*node] >= val) ans = query(l, mid, node*2, val);
else ans = query(mid+1, r, node*2+1, val - st[2*node]);
return ans;
}
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> v[i];
update(1, n, 1, i, 1);
}
for(int i = n; i >= 1; i--) {
int poz = query(1, n, 1, v[i]);
ans[poz] = i;
update(1, n, 1, poz, -1);
}
for(int i = 1; i <= n; i++)
cout << ans[i] << '\n';
}