Submission #1115505

#TimeUsernameProblemLanguageResultExecution timeMemory
1115505SkymagicSterilizing Spray (JOI15_sterilizing)C++17
100 / 100
138 ms5976 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; struct node{ ll sum; }; const int MAXN = 1e5 + 10; int a[MAXN]; node seg[4 * MAXN]; void build(int x, int lx, int rx){ if(lx == rx){ seg[x].sum = a[lx]; return; } int m = (lx + rx) / 2; int lc = 2 * x, rc = 2 * x + 1; build(lc, lx, m); build(rc, m + 1, rx); seg[x].sum = seg[lc].sum + seg[rc].sum; } void update_set(int x, int lx, int rx, int i, int val){ if(rx < i || lx > i) return; if(lx == rx){ seg[x].sum = val; return; } int m = (lx + rx) / 2; int lc = 2 * x, rc = 2 * x + 1; update_set(lc, lx, m, i, val); update_set(rc, m + 1, rx, i, val); seg[x].sum = seg[lc].sum + seg[rc].sum; } void update(int x, int lx, int rx, int l, int r, int k){ if(rx < l || lx > r || seg[x].sum == 0) return; if(lx == rx){ seg[x].sum /= k; return; } int m = (lx + rx) / 2; int lc = 2 * x, rc = 2 * x + 1; update(lc, lx, m, l, r, k); update(rc, m + 1, rx, l, r, k); seg[x].sum = seg[lc].sum + seg[rc].sum; } ll query(int x, int lx, int rx, int l, int r){ if(rx < l || lx > r) return 0; if(l <= lx && rx <= r) return seg[x].sum; int m = (lx + rx) / 2; int lc = 2 * x, rc = 2 * x + 1; return query(lc, lx, m, l, r) + query(rc, m + 1, rx, l, r); } int main(){ cin.tie(0)->sync_with_stdio(0); int n, q, k; cin >> n >> q >> k; for(int i=1; i<=n; i++){ cin >> a[i]; } build(1, 1, n); while(q--){ int t, a, b; cin >> t >> a >> b; if(t == 1){ update_set(1, 1, n, a, b); } else if(t == 2){ if(k != 1) update(1, 1, n, a, b, k); } else{ cout << query(1, 1, n, a, b) << "\n"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...