# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
671653 | 2022-12-13T12:18:08 Z | tolbi | 원숭이와 사과 나무 (IZhO12_apple) | C++17 | 455 ms | 262144 KB |
#pragma optimize("Bismillahirrahmanirrahim") //█▀█─█──█──█▀█─█─█ //█▄█─█──█──█▄█─█■█ //█─█─█▄─█▄─█─█─█─█ //Allahuekber //ahmet23 orz... //Sani buyuk Osman Pasa Plevneden cikmam diyor. //FatihSultanMehmedHan //YavuzSultanSelimHan //AbdulhamidHan #define author tolbi #include <bits/stdc++.h> #define int long long #define endl '\n' #define vint(x) vector<int> x #define deci(x) int x;cin>>x; #define decstr(x) string x;cin>>x; #define cinarr(x) for (auto &it : x) cin>>it; #define coutarr(x) for (auto &it : x) cout<<it<<" ";cout<<endl; #define sortarr(x) sort(x.begin(),x.end()) #define sortrarr(x) sort(x.rbegin(),x.rend()) #define det(x) cout<<"NO\0YES"+x*3<<endl; #define INF LONG_LONG_MAX #define rev(x) reverse(x.begin(),x.end()); #define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define tol(bi) (1LL<<((int)(bi))) const int MOD = 1e9+7; using namespace std; mt19937 ayahya(chrono::high_resolution_clock().now().time_since_epoch().count()); struct SegTree{ struct Node{ int val, lnode, rnode, l, r, lazy; Node():lnode(-1),rnode(-1),val(0),lazy(0){} }; vector<Node> segtree; SegTree(){ segtree.push_back(Node()); segtree[0].l=1; segtree[0].r=1000000000; segtree[0].val=0; segtree[0].lazy=0; } void lyap(int node){ int mid = segtree[node].l+(segtree[node].r-segtree[node].l)/2; if (segtree[node].lnode==-1){ segtree[node].lnode=segtree.size(); segtree.push_back(Node()); segtree[segtree[node].lnode].l=segtree[node].l; segtree[segtree[node].lnode].r=mid; } } void ryap(int node){ int mid = segtree[node].l+(segtree[node].r-segtree[node].l)/2; if (segtree[node].rnode==-1){ segtree[node].rnode=segtree.size(); segtree.push_back(Node()); segtree[segtree[node].rnode].l=mid+1; segtree[segtree[node].rnode].r=segtree[node].r; } } void dallan(int node){ if (segtree[node].lazy==1){ lyap(node); ryap(node); segtree[segtree[node].lnode].lazy=1; segtree[segtree[node].rnode].lazy=1; segtree[node].val=segtree[node].r-segtree[node].l+1; } segtree[node].lazy=0; } int query(int l, int r, int node = 0){ dallan(node); if (segtree[node].l>=l && segtree[node].r<=r) return segtree[node].val; if (segtree[node].l>r || segtree[node].r<l) return 0ll; int rval = 0; if (segtree[node].lnode!=-1){ rval+=query(l, r, segtree[node].lnode); } if (segtree[node].rnode!=-1){ rval+=query(l, r, segtree[node].rnode); } return rval; } void update(int l, int r, int node = 0) { dallan(node); if (segtree[node].l>=l && segtree[node].r<=r){ segtree[node].lazy=1; dallan(node); return; } if (segtree[node].l>r || segtree[node].r<l) return; int mid = segtree[node].l+(segtree[node].r-segtree[node].l)/2; segtree[node].val=0ll; lyap(node); update(l, r, segtree[node].lnode); segtree[node].val+=segtree[segtree[node].lnode].val; ryap(node); update(l, r, segtree[node].rnode); segtree[node].val+=segtree[segtree[node].rnode].val; } }; int32_t main(){ ios; int t=1; int tno = 0; if (!t) cin>>t; while (t-(tno++)){ SegTree segtree; deci(q); int c = 0; while (q--){ deci(d); deci(l);deci(r); l+=c; r+=c; if (d==1){ c=segtree.query(l,r); cout<<c<<endl; } else { segtree.update(l,r); } } } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 0 ms | 212 KB | Output is correct |
3 | Correct | 1 ms | 340 KB | Output is correct |
4 | Correct | 24 ms | 12800 KB | Output is correct |
5 | Correct | 26 ms | 12736 KB | Output is correct |
6 | Correct | 26 ms | 12788 KB | Output is correct |
7 | Correct | 27 ms | 12768 KB | Output is correct |
8 | Correct | 224 ms | 98936 KB | Output is correct |
9 | Correct | 421 ms | 197556 KB | Output is correct |
10 | Correct | 455 ms | 197584 KB | Output is correct |
11 | Correct | 434 ms | 197672 KB | Output is correct |
12 | Correct | 455 ms | 197680 KB | Output is correct |
13 | Runtime error | 420 ms | 262144 KB | Execution killed with signal 9 |
14 | Halted | 0 ms | 0 KB | - |