Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- ifstream in("weekend.in");
- ofstream out("weekend.out");
- const int N = 200005;
- vector < int > fenw(N + 5), a(N + 5), ans;
- int n;
- void upd(int pos, int val) {
- for (; pos <= n; pos += pos & (-pos)) {
- fenw[pos] += val;
- }
- }
- int q(int pos) {
- int ans = 0;
- for (; pos; pos -= pos & (-pos)) {
- ans += fenw[pos];
- }
- return ans;
- }
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- in >> n;
- for (int i = 1; i <= n; i++) {
- in >> a[i];
- a[i]++;
- upd(i, 1);
- }
- for (int i = n; i >= 1; i--) {
- int l = 1, r = n, pos;
- while(l <= r) {
- int mid = (l + r) / 2;
- int value = q(mid);
- if (value >= a[i]) {
- pos = mid;
- r = mid - 1;
- }
- else {
- l = mid + 1;
- }
- }
- ans.push_back(pos);
- upd(pos, -1);
- }
- for (int i = ans.size() - 1; i >= 0; i--) {
- out << ans[i] << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement