제출 #1293094

#제출 시각아이디문제언어결과실행 시간메모리
1293094IrateSterilizing Spray (JOI15_sterilizing)C++20
100 / 100
111 ms4556 KiB
#include <bits/stdc++.h> using namespace std; struct SegmentTree{ vector<long long>sTree; SegmentTree(int n){ sTree.resize(4 * n); } void Build(int node, int l, int r, vector<int>&v){ if(l == r){ sTree[node] = v[l]; } else{ int mid = (l + r) / 2; Build(node * 2, l, mid, v); Build(node * 2 + 1, mid + 1, r, v); sTree[node] = sTree[node * 2] + sTree[node * 2 + 1]; } } void Update(int node, int l, int r, int pos, int val){ if(l == r){ sTree[node] = val; } else{ int mid = (l + r) / 2; if(pos <= mid){ Update(node * 2, l, mid, pos, val); } else{ Update(node * 2 + 1, mid + 1, r, pos, val); } sTree[node] = sTree[node * 2] + sTree[node * 2 + 1]; } } long long Query(int node, int l, int r, int ql, int qr){ if(ql > r || l > qr){ return 0; } if(ql <= l && r <= qr){ return sTree[node]; } int mid = (l + r) / 2; long long lc = Query(node * 2, l, mid, ql, qr); long long rc = Query(node * 2 + 1, mid + 1, r, ql, qr); return lc + rc; } void R_Update(int node, int l, int r, int ql, int qr, int k){ if(k == 1)return; if(ql > r || l > qr)return; if(sTree[node] == 0)return; if(l == r){ sTree[node] /= k; return; } int mid = (l + r) / 2; R_Update(node * 2, l, mid, ql, qr, k); R_Update(node * 2 + 1, mid + 1, r, ql, qr, k); sTree[node] = sTree[node * 2] + sTree[node * 2 + 1]; } }; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n, q, k; cin >> n >> q >> k; vector<int>v(n + 1); for(int i = 1;i <= n;++i){ cin >> v[i]; } SegmentTree tree(n); tree.Build(1, 1, n, v); while(q--){ int type; cin >> type; if(type == 1){ int pos, x; cin >> pos >> x; tree.Update(1, 1, n, pos, x); } else if(type == 2){ int l, r; cin >> l >> r; tree.R_Update(1, 1, n, l, r, k); } else{ int l, r; cin >> l >> r; cout << tree.Query(1, 1, n, l, r) << '\n'; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...