답안 #648063

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
648063 2022-10-05T08:43:54 Z ghostwriter 원숭이와 사과 나무 (IZhO12_apple) C++14
100 / 100
562 ms 262144 KB
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include <debug.h>
#else
#define debug(...)
#endif
#define ft front
#define bk back
#define st first
#define nd second
#define ins insert
#define ers erase
#define pb push_back
#define pf push_front
#define _pb pop_back
#define _pf pop_front
#define lb lower_bound
#define ub upper_bound
#define mtp make_tuple
#define bg begin
#define ed end
#define all(x) (x).bg(), (x).ed()
#define sz(x) (int)(x).size()
typedef long long ll; typedef unsigned long long ull;
typedef double db; typedef long double ldb;
typedef pair<int, int> pi; typedef pair<ll, ll> pll;
typedef vector<int> vi; typedef vector<ll> vll; typedef vector<pi> vpi; typedef vector<pll> vpll;
typedef string str;
template<typename T> T gcd(T a, T b) { return (b == 0? a : gcd(b, a % b)); }
template<typename T> T lcm(T a, T b) { return a / gcd(a, b) * b; }
#define FOR(i, l, r) for (int (i) = (l); (i) <= (r); ++(i))
#define FOS(i, r, l) for (int (i) = (r); (i) >= (l); --(i))
#define FRN(i, n) for (int (i) = 0; (i) < (n); ++(i))
#define FSN(i, n) for (int (i) = (n) - 1; (i) >= 0; --(i))
#define EACH(i, x) for (auto &(i) : (x))
#define WHILE while
#define file "TEST"
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
ll rand(ll l, ll r) { return uniform_int_distribution<ll>(l, r)(rd); }
/*
----------------------------------------------------------------
    END OF TEMPLATE
----------------------------------------------------------------
    Tran The Bao - ghostwriter
    Training for VOI23 gold medal
----------------------------------------------------------------
    DIT ME CHUYEN BAO LOC
----------------------------------------------------------------
*/
struct Node {
	Node *left, *right;
	int sum;
	bool la;
	Node() { left = right = 0; sum = la = 0; }
	Node(Node *left, Node *right, int sum, bool la) : left(left), right(right), sum(sum), la(la) {}
};
int m, c = 0;
Node *root;
void lazy(Node *cur, int l, int r) {
	if (!cur -> la) return;
	cur -> sum = r - l + 1;
	if (l != r) {
		if (!cur -> left) cur -> left = new Node();
		if (!cur -> right) cur -> right = new Node();
		cur -> left -> la = 1;
		cur -> right -> la = 1;
	}
	cur -> la = 0;
}
int get(Node *cur, int l, int r, int ql, int qr) {
	lazy(cur, l, r);
	if (r < ql || l > qr) return 0;
	if (ql <= l && r <= qr) return cur -> sum;
	int mid = l + (r - l) / 2;
	if (!cur -> left) cur -> left = new Node();
	if (!cur -> right) cur -> right = new Node();
	return get(cur -> left, l, mid, ql, qr) + get(cur -> right, mid + 1, r, ql, qr);
}
void upd(Node *cur, int l, int r, int ql, int qr) {
	lazy(cur, l, r);
	if (r < ql || l > qr) return;
	if (ql <= l && r <= qr) {
		cur -> la = 1;
		lazy(cur, l, r);
		return;
	}
	int mid = l + (r - l) / 2;
	if (!cur -> left) cur -> left = new Node();
	if (!cur -> right) cur -> right = new Node();
	upd(cur -> left, l, mid, ql, qr);
	upd(cur -> right, mid + 1, r, ql, qr);
	cur -> sum = cur -> left -> sum + cur -> right -> sum;
}
signed main() {
    ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    // freopen(file".inp", "r", stdin);
    // freopen(file".out", "w", stdout);
    root = new Node();
    cin >> m;
    WHILE(m--) {
    	int d, x, y;
    	cin >> d >> x >> y;
    	x += c;
    	y += c;
    	if (d == 1) {
    		int ans = get(root, 1, 1e9, x, y);
    		c = ans;
    		cout << ans << '\n';
    		continue;
    	}
    	upd(root, 1, 1e9, x, y);
    }
    return 0;
}
/*
----------------------------------------------------------------
From Benq:
    stuff you should look for
        * int overflow, array bounds
        * special cases (n=1?)
        * do smth instead of nothing and stay organized
        * WRITE STUFF DOWN
        * DON'T GET STUCK ON ONE APPROACH
----------------------------------------------------------------
*/
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 15 ms 5964 KB Output is correct
5 Correct 19 ms 7116 KB Output is correct
6 Correct 19 ms 6868 KB Output is correct
7 Correct 17 ms 7124 KB Output is correct
8 Correct 142 ms 52384 KB Output is correct
9 Correct 316 ms 89168 KB Output is correct
10 Correct 310 ms 99940 KB Output is correct
11 Correct 307 ms 108264 KB Output is correct
12 Correct 335 ms 111988 KB Output is correct
13 Correct 307 ms 139024 KB Output is correct
14 Correct 328 ms 140280 KB Output is correct
15 Correct 515 ms 254612 KB Output is correct
16 Correct 562 ms 256500 KB Output is correct
17 Correct 328 ms 145340 KB Output is correct
18 Correct 380 ms 145360 KB Output is correct
19 Correct 531 ms 262144 KB Output is correct
20 Correct 534 ms 262144 KB Output is correct