Submission #1293134

#TimeUsernameProblemLanguageResultExecution timeMemory
1293134cansu_mutlu원숭이와 사과 나무 (IZhO12_apple)C++20
100 / 100
393 ms205652 KiB
#include<bits/stdc++.h> #define int long long using namespace std; struct vertex { int sum = 0, lazy = 0; vertex *leftcocuk = nullptr,*rightcocuk = nullptr; }; void apply(vertex *node,int len, int val) { if(val==1) { node->lazy = val; node->sum = len*val; } } void push(vertex *node,int l,int r) { if(l==r) return; if(node->leftcocuk==nullptr) node->leftcocuk = new vertex; if(node->rightcocuk== nullptr) node->rightcocuk = new vertex; int mid = l+r; mid/=2; apply(node->leftcocuk,mid-l+1,node->lazy); apply(node->rightcocuk,r-mid,node->lazy); } void degis(vertex *node,int l,int r,int x,int y,int val) { if(l>=x && r<=y) { apply(node,r-l+1,val); } else { int mid = l+r; mid/=2; push(node,l,r); if(x<=mid) degis(node->leftcocuk,l,mid,x,y,val); if(y>=mid+1) degis(node->rightcocuk,mid+1,r,x,y,val); node->sum = node->leftcocuk->sum + node->rightcocuk->sum; } } int bul( vertex *node,int l,int r,int x,int y) { if(l>=x && r<=y) return node->sum; int mid = l+r; mid/=2; int ans = 0; push(node,l,r); if(x<=mid) ans += bul(node->leftcocuk,l,mid,x,y); if(y>=mid+1) ans+= bul(node->rightcocuk,mid+1,r,x,y); return ans; } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int m; int n = 1e9+1; cin>> m; int c = 0; vertex v; while(m--) { int num,x,y; cin >> num >> x >> y; if(num==1) { c = bul(&v,1,n,x+c,y+c); cout << c << endl; } else { degis(&v,1,n,x+c,y+c,1); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...