제출 #1267559

#제출 시각아이디문제언어결과실행 시간메모리
1267559i_elhdadMonkey and Apple-trees (IZhO12_apple)C++20
0 / 100
1 ms320 KiB
// #pragma GCC optimize ("O3") // #pragma GCC optimize ("unroll-loops") // #pragma comment(linker, "/STACK:2000000") #include<bits/stdc++.h> using namespace std; #define ll long long #define int long long #define ld long double #define ui unsigned int #define endl "\n" #define FOCUS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); const long double NEG_INF = -1e300L; #include <bits/stdc++.h> using namespace std; extern struct Node *const Empty; struct Node { Node *left = Empty; Node *right = Empty; int val = 0; int lazy = 0; Node(int v) { val = v; left = Empty; right = Empty; lazy = 0; } Node() { val = 0; lazy = 0; left = this; right = this; } }; Node *const Empty = new Node(0); const int N = 2e5 + 5; void propagate(Node * &cur,int l,int r) { if (!cur->lazy) { return; } cur->val = r - l + 1; if (l != r) { Node *&left = cur->left; Node *&right = cur->right; if (left == Empty)left = new Node(0); if (right == Empty)right = new Node(0); left->lazy = 1; right->lazy = 1; } cur->lazy = 0; } void add(int l,int r,int val, Node *&cur,int st = 0,int en = 1e9) { if (l > r)return; if (r < st || l > en)return; if (cur == Empty)cur = new Node(0); propagate(cur, st, en); if (st >= l && en <= r) { cur->lazy = 1; propagate(cur, st, en); return; } int mid = (st + en) / 2; add(l, r, val, cur->left, st, mid); add(l, r, val, cur->right, mid + 1, en); cur->val = max(cur->left->val + cur->right->val,cur->val); } int query(int l,int r, Node *&cur,int st = 0,int en = 1e9) { if (l > r)return 0; if (r < st || l > en)return 0; if (cur == Empty)return 0; propagate(cur, st, en); if (st >= l && en <= r) { return cur->val; } int mid = (st + en) / 2; return query(l, r, cur->left, st, mid) + query(l, r, cur->right, mid + 1, en); } bool comp(array<ll, 4> a, array<ll, 4> b) { if (a[0] != b[0]) return a[0] < b[0]; return !a[1]; } signed main() { FOCUS if (!freopen("f.in", "r", stdin)) { // If file not found, we continue reading from stdin (useful for online judge). // But print warning to stderr so you notice during local testing. // Comment out the exit if you want fall-back to stdin. // perror("f.in"); // exit(1); } if (!freopen("f.out", "w", stdout)) { // perror("f.out"); // exit(1); } int n; cin >> n; Node *root = Empty; int C = 0; for (int i = 0; i < n; i++) { int op, l, r; cin >> op >> l >> r; l += C; r += C; if (op == 1) { C = query(l, r, root); cout << C << endl; } else { add(l, r, 1, root); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...