Submission #1157627

#TimeUsernameProblemLanguageResultExecution timeMemory
1157627mocha단층 (JOI16_ho_t5)C++20
100 / 100
157 ms10912 KiB
#include <bits/stdc++.h>
#define int long long
#define ff first
#define ss second
using namespace std;
const int mx = 2e5+5;

int n, q;
pair<int, int> p[mx];

struct node {
    int x, ty, l;
} qu[mx];

int bit[2][mx];

void insert(int idx, int id, int x) {
    for (int i=id;i<mx;i+=i&-i) {
        bit[idx][i] += x;
    }
}

int query(int idx, int id) {
    int ans = 0;
    for (int i=id;i>0;i-=i&-i) ans += bit[idx][i];
    return ans;
}

signed main() {
    cin >> n >> q;
    for (int i=1;i<=n;i++) insert(0, i, 1);
//    for (int i=1;i<=n;i++) p[i] = {i, 0};
    for (int i=1;i<=q;i++) {
        cin >> qu[i].x >> qu[i].ty >> qu[i].l;
    }
//    for (int i=1;i<=n;i++) cout << query(0, i) << " ";
//    cout << "\n";
    for (int i=q;i>=1;i--) {
        auto [x, ty, L] = qu[i];
        if (ty == 1) {
            int l = 0, r = n;
            while (l < r) {
                int m = l + r + 1 >> 1;
                if (query(0, m) <= x) l = m;
                else r = m-1;
            }
            if (l == 0) continue;
            insert(1, 1, L);
            insert(1, l+1, -L);
//            for (int i=1;i<=n;i++) {
//                if (p[i].ff <= x) p[i].ss += L;
//            }
        } else {
            int l = 1, r = n+1;
            while (l < r) {
                int m = l + r >> 1;
                if (query(0, m) - 2 * query(1, m) > x) r = m;
                else l = m + 1;
            }
            insert(0, l, 2*L);
            insert(1, l, L);
//            for (int i=1;i<=n;i++) {
//                int X = p[i].ff - 2 * p[i].ss, Y = 0;
//                if (X > x) {
//                    p[i].ff += 2 * L;
//                    p[i].ss += L;
//                }
//            }
        }
    }
//    for (int i=1;i<=n;i++) cout << p[i].ss << "\n";
    for (int i=1;i<=n;i++) cout << query(1, i) << "\n";
//    for (int i=1;i<=n;i++) cout << p[i].ff - 2*p[i].ss << " ";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...