제출 #1329600

#제출 시각아이디문제언어결과실행 시간메모리
1329600beny푸드 코트 (JOI21_foodcourt)C++20
0 / 100
20 ms2804 KiB
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
#define ll long long
#define lc id*2
#define rc id*2+1
#define smid (nl+nr)/2

const int N = 3e5 + 5;

ll a[N * 4], b[N * 4];
void rel (int nl, int nr, int id) {
    if (nl == nr - 1) return;
    //lc
    if (a[lc] >= b[id]) a[lc] -= b[id];
    else {
        b[lc] += b[id] - a[lc];
        a[lc] = 0;
    }
    a[lc] += a[id];
    //rc
    if (a[rc] >= b[id]) a[rc] -= b[id];
    else {
        b[rc] += b[id] - a[rc];
        a[rc] = 0;
    }
    a[rc] += a[id];

    //
    a[id] = b[id] = 0;
    return;
}
void inc (int ql, int qr, int nl, int nr, int id, ll val) {
    rel(nl, nr, id);
    if (ql >= nr || nl >= qr) return;
    if (ql <= nl && nr <= qr) {
        a[id] += val;
        return;
    }
    inc(ql, qr, nl, smid, lc, val);
    inc(ql, qr, smid, nr, rc, val);
    return;
}
void dec (int ql, int qr, int nl, int nr, int id, ll val) {
    rel(nl, nr, id);
    if (ql >= nr || nl >= qr) return;
    if (ql <= nl && nr <= qr) {
        if (a[id] >= val) a[id] -= val;
        else {
            b[id] += val - a[id];
            a[id] = 0;
        }
        return;
    }
    dec(ql, qr, nl, smid, lc, val);
    dec(ql, qr, smid, nr, rc, val);
    return;
}
pair<int, int> get (int nl, int nr, int id, int ind) {
    rel(nl, nr, id);
    if (nl == nr - 1) {
        return pair(a[id], b[id]);
    }
    if (ind < smid) return get(nl, smid, lc, ind);
    else return get(smid, nr, rc, ind);
}


int n, m, q;


int main(){

    cin >> n >> m >> q;
    if (m != 1) return 0;
    for (int i = 1; i <= q; i++) {
        int t; cin >> t;
        if (t == 1) {
            int l, r, c, k; cin >> l >> r >> c >> k;
            inc(l, r + 1, 1, n + 1, 1, k);
        }
        if (t == 2) {
            int l, r, k; cin >> l >> r >> k;
            dec(l, r + 1, 1, n + 1, 1, k);
        }
        if (t == 3) {
            int a, b; cin >> a >> b;
            pair<int, int> p = get(1, n + 1, 1, a);
            if (p.first >= b) cout << "1\n";
            else cout << "0\n";
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...