Submission #1338210

#TimeUsernameProblemLanguageResultExecution timeMemory
1338210kawhietTrading (IZhO13_trading)C++20
0 / 100
5 ms9796 KiB
#include <bits/stdc++.h>
using namespace std;

constexpr int N = 3e5;

int t[4 * N], lz[4 * N];
bool has[4 * N];

void push(int id, int tl, int tr) {
    if (tl == tr || !has[id]) {
        return;
    }
    int x = (id << 1) + 1, y = x + 1, tm = (tl + tr) >> 1;
    t[x] = max(t[x], lz[id]);
    t[y] = max(t[y], lz[id]);
    lz[x] = max(lz[x], lz[id]);
    lz[y] = max(lz[y], lz[id]);
    has[x] = has[y] = 1;
    has[id] = lz[id] = 0;
}

void update(int id, int tl, int tr, int l, int r, int k) {
    push(id, tl, tr);
    if (r < tl || tr < l) return;
    if (l <= tl && tr <= r) {
        has[id] = 1;
        lz[id] = max(lz[id], k);
        t[id] = max(t[id], k);
        push(id, tl, tr);
        return;
    }
    int x = (id << 1) + 1, y = x + 1, tm = (tl + tr) >> 1;
    update(x, tl, tm, l, r, k);
    update(y, tm + 1, tr, l, r, k);
    t[id] = max(t[x], t[y]);
}

int get(int id, int tl, int tr, int i) {
    push(id, tl, tr);
    if (tl == tr) {
        return t[id];
    }
    int x = (id << 1) + 1, y = x + 1, tm = (tl + tr) >> 1;
    if (i <= tm) {
        return get(x, tl, tm, i);
    } else {
        return get(y, tm + 1, tr, i);
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m;
    cin >> n >> m;
    fill(lz, lz + 4 * N, -2e9);
    fill(t, t + 4 * N, -2e9);
    while (m--) {
        int l, r, x;
        cin >> l >> r >> x;
        l--; r--;
        update(0, 0, n - 1, l, r, x - l);
    }
    for (int i = 0; i < n; i++) {
        cout << max(0, get(0, 0, n - 1, i) + i) << ' ';
    }
    cout << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...