Submission #69864215


Source Code Expand

#include <bits/stdc++.h>

using namespace std;

#define int long long

using ll = long long;

const int N = 3e5 + 10;

int n;
ll a[N];
int q;

struct tree{
    ll t[4*N], ze[4*N];
    ll tag[4*N];

    void pushup(int p) {
        t[p] = min(t[p * 2], t[p * 2 + 1]);
        ze[p] = ze[p * 2] + ze[p * 2 + 1];
    }

    void pushdown(int p) {
        if (tag[p]) {
            t[p * 2] -= tag[p];
            t[p * 2 + 1] -= tag[p];
            tag[p * 2] += tag[p];
            tag[p * 2 + 1] += tag[p];
            tag[p] = 0;
        }
    }

    void build(int p, int l, int r) {
        if (l == r) {
            t[p] = a[l];
            return;
        }
        int mid = (l + r) / 2;
        build(p * 2, l, mid);
        build(p * 2 + 1, mid + 1, r);
        pushup(p);
    }

    void update(int p, int l, int r, int L, int R, int k) {
        if (L <= l && r <= R) {
            tag[p] += k;
            t[p] -= k;
            return;
        }
        int mid = (l + r) / 2;
        pushdown(p);
        if (L <= mid) update(p * 2, l, mid, L, R, k);
        if (R > mid) update(p * 2 + 1, mid + 1, r, L, R, k);
        pushup(p);
    }

    pair<int, ll> query_fir(int p, int l, int r, int L, int R, int k) {
        if (t[p] >= k) {
            return {-1, -1};
        }
        if (l == r) {
            return {l, t[p]};
        }
        int mid = (l + r) / 2;
        pushdown(p);
        if (L <= mid)  {
           auto t = query_fir(p * 2, l, mid, L, R, k);
           if (t != (pair<int,ll>){-1, -1}) return t; 
        }
        if (R > mid)  {
           auto t = query_fir(p * 2 + 1, mid + 1, r, L, R, k);
           if (t != (pair<int,ll>){-1, -1}) return t; 
        }
        return {-1, -1};
    }

    void chg(int p, int l ,int r, int pos) {
        // cerr << "chg" << l << ' ' << r << ' ' << t[p] << '\n';
        if (l == r) {
            // cerr << "chggg" << l << ' ' << r << ' ' << t[p] << '\n';
            t[p] = 1e18;
            ze[p] = 1;
            return;
        }
        int mid = (l + r) / 2;
        pushdown(p);
        if (pos <= mid) chg(p * 2, l, mid, pos);
        else chg(p * 2 + 1, mid + 1, r, pos);
        pushup(p);
    }
    
    int getze(int p, int l, int r, int L, int R) {
        if (L <= l && r <= R) {
            return ze[p];
        }
        int mid = (l + r) / 2;
        pushdown(p);
        int s = 0;
        if (L <= mid) s += getze(p * 2, l, mid, L, R);
        if (R > mid) s += getze(p * 2 + 1, mid + 1, r, L, R);
        // pushup(p);
        return s;
    } 
};

tree T;


signed main() {
    ios::sync_with_stdio(0);
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    T.build(1, 1, n);
    // cerr << T.query_fir(1, 1, n, 2, 5, 5).first << '\n';
    cin >> q;
    while (q--) {
        int l, r, k;
        cin >> l >> r >> k;
        // cerr << "process" << l << ' ' << r << ' ' << k << '\n';
        ll tt = r - l + 1 - T.getze(1, 1, n, l, r);
        long long s = 0;
        pair<int, ll> tp = T.query_fir(1, 1, n, l, r, k);
        while (tp != (pair<int,ll>){-1, -1}) {
            // cerr << "detect" << tp.first << ' ' << tp.second << '\n';
            s += tp.second;
            T.chg(1, 1, n, tp.first);
            tt--;
            tp = T.query_fir(1, 1, n, l, r, k);
        }
        cout << 1ll * tt * k + s << '\n';
        T.update(1, 1, n, l, r, k);
        
    }
    
    
    return 0;
}

Submission Info

Submission Time
Task F - Clearance
User Nicrobott
Language C++ 20 (gcc 12.2)
Score 525
Code Size 3544 Byte
Status AC
Exec Time 1499 ms
Memory 31888 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 525 / 525
Status
AC × 1
AC × 38
Set Name Test Cases
Sample sample_01.txt
All sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 3500 KiB
test_01.txt AC 1 ms 3488 KiB
test_02.txt AC 1 ms 3448 KiB
test_03.txt AC 1 ms 3496 KiB
test_04.txt AC 416 ms 3732 KiB
test_05.txt AC 394 ms 3496 KiB
test_06.txt AC 578 ms 3496 KiB
test_07.txt AC 1057 ms 30556 KiB
test_08.txt AC 1346 ms 30372 KiB
test_09.txt AC 1499 ms 30404 KiB
test_10.txt AC 1256 ms 31564 KiB
test_11.txt AC 1295 ms 31888 KiB
test_12.txt AC 1391 ms 30660 KiB
test_13.txt AC 814 ms 31848 KiB
test_14.txt AC 836 ms 31884 KiB
test_15.txt AC 782 ms 31820 KiB
test_16.txt AC 786 ms 30412 KiB
test_17.txt AC 790 ms 30452 KiB
test_18.txt AC 828 ms 30456 KiB
test_19.txt AC 1292 ms 30480 KiB
test_20.txt AC 1232 ms 30476 KiB
test_21.txt AC 766 ms 30480 KiB
test_22.txt AC 542 ms 30340 KiB
test_23.txt AC 538 ms 30412 KiB
test_24.txt AC 540 ms 30400 KiB
test_25.txt AC 541 ms 30304 KiB
test_26.txt AC 564 ms 31608 KiB
test_27.txt AC 551 ms 31356 KiB
test_28.txt AC 583 ms 31756 KiB
test_29.txt AC 587 ms 31820 KiB
test_30.txt AC 508 ms 31764 KiB
test_31.txt AC 488 ms 31644 KiB
test_32.txt AC 842 ms 31772 KiB
test_33.txt AC 839 ms 31832 KiB
test_34.txt AC 836 ms 31748 KiB
test_35.txt AC 832 ms 31844 KiB
test_36.txt AC 839 ms 31800 KiB
test_37.txt AC 833 ms 31760 KiB