답안 #689836

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
689836 2023-01-29T13:47:13 Z lovezah 원숭이와 사과 나무 (IZhO12_apple) C++17
100 / 100
544 ms 260252 KB
#include <bits/stdc++.h>
namespace newbiezah {
#ifdef LOCAL
#include "E:\cp-Library\debug.h"
#else
#define dbg(...)
#endif

#define ALL(x) (x).begin(), (x).end() 
#define RALL(x) (x).rbegin(), (x).rend()
#define SZ(x) (int((x).size()))
#define REV(x) reverse(ALL(x))
#define UNIQUE(x) sort(ALL(x)), x.erase(unique(ALL(x)), x.end())
#define mask(x) (1 << (x))
#define fi first
#define se second
#define ft front()
#define bk back()
#define ppb pop_back()
#define ppf pop_front()
#define pb push_back
#define pf push_front
#define eb emplace_back 
#define mp make_pair
#define ins insert
#define lb lower_bound
#define ub upper_bound
#define tcT template<class T

tcT> using V = std::vector<T>;
tcT> int ilb(V<T> &a, const T &b) { return int(lb(ALL(a), b) - a.begin()); }
tcT> int iub(V<T> &a, const T &b) { return int(ub(ALL(a), b) - a.begin()); }
tcT, size_t sz>
using AR = std::array<T, sz>;
using ll = int64_t;
using db = double;
using str = std::string;
using pi = std::pair<int, int>;
using pl = std::pair<ll, ll>;
using VI = V<int>;
using VL = V<ll>;
using VS = V<str>;
using VB = V<bool>;
using VPI = V<pi>;
using VPL = V<pl>;

std::mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count());
#define uid(a, b) uniform_int_distribution<int>(a, b)(rng)

tcT> using pq = std::priority_queue<T>;
tcT> using pqg = std::priority_queue<T, std::vector<T>, std::greater<T>>;
tcT> bool ckmax(T &u, T v) { return v > u ? u = v, true : false; }
tcT> bool ckmin(T &u, T v) { return v < u ? u = v, true : false; }

#define FOR(i, a, n) for (int i = (a); i < (n); i++)
#define F0R(i, n) FOR(i, 0, n)
#define FORd(i, a, n) for (int i = (n) - 1; i >= (a); i--)
#define F0Rd(i, n) FORd(i, 0, n)
#define rep(n) F0R(_, n)
#define trav(a, v) for (auto &a : v)
#define each(a, b, v) for (auto &&[a, b] : v)
#define each3(a, b, c, v) for (auto &&[a, b, c] : v)

const char nl = '\n';
const int mod1 = int(1e9)+7, mod9 = 998244353;
const int dxi[8] = {1, 0, -1, 0, 1, 1, -1, -1}, dyi[8] = {0, 1, 0, -1, 1, -1, 1, -1};
} // namespace newbiezah
using namespace newbiezah;
using namespace std;

struct node {
    int val, lz;
    int l, r;
    node* c[2];
    node(int l, int r) : l(l), r(r) {
        F0R(i, 2) c[i] = NULL;
        val = lz = 0;
    }

    void push() {
        int m = (l+r)/2;
        if (!c[0]) c[0] = new node(l, m);
        if (!c[1]) c[1] = new node(m, r);
        if (lz) {
            val = r-l;
            F0R(i, 2) c[i]->lz = 1, c[i]->val = c[i]->r - c[i]->l;
        }
        lz = 0;
    }
    void pull() {
        val = 0;
        F0R(i, 2) val += c[i]->val;
    }
    void upd(int ql, int qr) {
        if (qr <= l || r <= ql) return;
        if (ql <= l && r <= qr) {
            lz = 1; push();
            return;
        }
        push();
        F0R(i, 2) c[i]->upd(ql, qr);
        pull();
    }
    int qry(int ql, int qr) {
        if (qr <= l || r <= ql) return 0;
        if (ql <= l && r <= qr) return val;
        int res = 0;
        push();
        F0R(i, 2) res += c[i]->qry(ql, qr);
        return res;
    }
};
int n, c;

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);

    cin >> n;
    node rt(0, 1e9+2);
    rep(n) {
        int t, l, r; cin >> t >> l >> r;
        l += c, r += c;
        if (t == 1) {
            c = rt.qry(l, r+1);
            cout << c << nl;
        } else {
            rt.upd(l, r+1);
        }
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 15 ms 6088 KB Output is correct
5 Correct 18 ms 7252 KB Output is correct
6 Correct 17 ms 7124 KB Output is correct
7 Correct 16 ms 7252 KB Output is correct
8 Correct 139 ms 55156 KB Output is correct
9 Correct 297 ms 95948 KB Output is correct
10 Correct 312 ms 106080 KB Output is correct
11 Correct 309 ms 113952 KB Output is correct
12 Correct 342 ms 117504 KB Output is correct
13 Correct 315 ms 135192 KB Output is correct
14 Correct 298 ms 137108 KB Output is correct
15 Correct 488 ms 253232 KB Output is correct
16 Correct 502 ms 254740 KB Output is correct
17 Correct 298 ms 143692 KB Output is correct
18 Correct 355 ms 143832 KB Output is correct
19 Correct 531 ms 260252 KB Output is correct
20 Correct 544 ms 260252 KB Output is correct