Pagini recente » Cod sursa (job #2475989) | Cod sursa (job #252462) | Cod sursa (job #2847999) | Cod sursa (job #3269601) | Cod sursa (job #3299283)
#pragma GCC optimize("Ofast")
#pragma GCC target("popcnt,avx2")
#pragma GCC optimize("unroll-loops")
#include <fstream>
#include <iostream>
using namespace std;
constexpr int NMAX = 30001;
int aib[NMAX], sol[NMAX], pozitieLibera[NMAX];
int n;
void update(int pos, int val) {
for(int i = pos; i <= n; i += i & -i)
aib[i] += val;
}
int query(int pos) {
int sum = 0;
for(int i = pos; i > 0; i -= i & -i)
sum += aib[i];
return sum;
}
int findKth(int k) {
int left = 1, right = n, mid, ans = n;
while(left <= right) {
mid = (left + right) / 2;
if(query(mid) >= k) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ifstream fin("schi.in");
ofstream fout("schi.out");
fin >> n;
for(int i = 1; i <= n; ++i) {
fin >> pozitieLibera[i];
update(i, 1);
}
for(int i = n; i >= 1; --i) {
int pos = findKth(pozitieLibera[i]);
sol[pos] = i;
update(pos, -1);
}
for(int i = 1; i <= n; ++i)
fout << sol[i] << '\n';
return 0;
}