제출 #1323048

#제출 시각아이디문제언어결과실행 시간메모리
1323048aaaaaaaa원숭이와 사과 나무 (IZhO12_apple)C++20
100 / 100
427 ms260416 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroint-loops") #pragma GCC optimization("Ofast") const int mxN = 1e9+100; struct Node { int val = 0, lazy = 0; Node* left = NULL; Node* right = NULL; }; typedef Node* root; root R = new Node; void push(root& nd, int l, int r) { if (!nd){ nd=new Node; } if(nd->lazy==0) return; nd->val = (r - l + 1) * nd->lazy; if (r - l >= 1) { if (nd->left == NULL) nd->left = new Node; if (nd->right == NULL) nd->right = new Node; nd->left->lazy = nd->lazy; nd->right->lazy = nd->lazy; } nd->lazy = 0; } void update(root& nd, int start, int end, int l, int r) { push(nd, start, end); if (start > r || end < l) return; if (start >= l && end <= r) { nd->lazy = 1; push(nd, start, end); return; } int mid = start + (end - start) / 2; update(nd->left, start, mid, l, r); update(nd->right, mid + 1, end, l, r); nd->val = (nd->left ? nd->left->val : 0) + (nd->right ? nd->right->val : 0); } int qry(root& nd, int start, int end, int l, int r) { push(nd, start, end); if (start > r || end < l) return 0; if (start >= l && end <= r) return nd->val; int mid = start + (end - start) / 2; return qry(nd->left, start, mid, l, r) + qry(nd->right, mid + 1, end, l, r); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,prev=0,p2=1,e,l,r;cin>>n; while(n--){ cin>>e>>l>>r; l+=prev; r+=prev; if(e==1){ prev=qry(R,1,mxN,l,r); cout<<prev<<'\n'; }else if(e==2){ update(R,1,mxN,l,r); } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...