제출 #1125689

#제출 시각아이디문제언어결과실행 시간메모리
1125689jemin0619Monkey and Apple-trees (IZhO12_apple)C++20
0 / 100
521 ms327680 KiB
#include <bits/stdc++.h> using namespace std; #define fastio cin.tie(NULL)->sync_with_stdio(false) #define ll long long struct Node{ Node*lp=NULL,*rp=NULL; ll val=0, lazy=0; }; struct DynamicSeg{ Node*root = new Node(); void prop(Node*node, ll leftNode, ll rightNode){ if(node->lazy==0) return; if(leftNode!=rightNode){ if(node->lp == NULL) node->lp = new Node(); if(node->rp == NULL) node->rp = new Node(); node->lp->lazy = 1; node->rp->lazy = 1; } node->val = rightNode-leftNode+1; node->lazy = 0; } void update_range(ll left, ll right, Node*node, ll leftNode, ll rightNode){ prop(node, leftNode, rightNode); if(rightNode<left || right<leftNode) return; if(left<=leftNode && rightNode<=right){ node->lazy = 1; prop(node, leftNode, rightNode); return; } ll mid = (leftNode+rightNode)/2; if(node->lp == NULL) node->lp = new Node(); if(node->rp == NULL) node->rp = new Node(); update_range(left, right, node->lp, leftNode, mid); update_range(left, right, node->rp, mid+1, rightNode); node->val = node->lp->val + node->rp->val; } ll query(ll left, ll right, Node*node, ll leftNode, ll rightNode){ if(node==NULL) return 0; prop(node, leftNode, rightNode); if(rightNode<left || right<leftNode) return 0; if(left<=leftNode && rightNode<=right) return node->val; ll mid = (leftNode+rightNode)/2; return query(left, right, node->lp, leftNode, mid) + query(left, right, node->rp, mid+1, rightNode); } }; int main(){ fastio; ll M,C=0; cin>>M; DynamicSeg Dseg; while(M--){ ll q,l,r; cin>>q>>l>>r; if(q==1){ ll ans = Dseg.query(l+C, r+C, Dseg.root, 1, 1e9); cout<<ans<<'\n'; C = ans; } else Dseg.update_range(l+C, r+C, Dseg.root, 1, 1e9); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...