제출 #754840

#제출 시각아이디문제언어결과실행 시간메모리
754840raysh07Sterilizing Spray (JOI15_sterilizing)C++17
100 / 100
224 ms8236 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define INF (int)(1e9) #define f first #define s second mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count()); const int N = 1e5 + 69; int n, q, k; pair <int, int> seg[4 * N]; //{sum, mn} int a[N]; void Build(int l, int r, int pos){ if (l == r){ seg[pos] = make_pair(a[l], a[l]); return; } int mid = (l + r)/2; Build(l, mid, pos * 2); Build(mid + 1, r, pos * 2 + 1); seg[pos].f = seg[pos * 2].f + seg[pos * 2 + 1].f; seg[pos].s = min(seg[pos * 2].s, seg[pos * 2 + 1].s); } void upd(int l, int r, int pos, int qp, int v){ if (l == r){ seg[pos] = make_pair(v, v); return; } int mid = (l + r)/2; if (qp <= mid) upd(l, mid, pos*2, qp, v); else upd(mid + 1, r, pos*2 + 1, qp, v); seg[pos].f = seg[pos * 2].f + seg[pos * 2 + 1].f; seg[pos].s = min(seg[pos * 2].s, seg[pos * 2 + 1].s); } void divide(int l, int r, int pos, int ql, int qr){ if (seg[pos].f == 0 || l > qr || r < ql) return; if (l == r){ seg[pos].f /= k; seg[pos].s = seg[pos].f; return; } int mid = (l + r)/2; divide(l, mid, pos*2, ql, qr); divide(mid + 1, r, pos*2 + 1, ql, qr); seg[pos].f = seg[pos * 2].f + seg[pos * 2 + 1].f; seg[pos].s = min(seg[pos * 2].s, seg[pos * 2 + 1].s); } int query(int l, int r, int pos, int ql, int qr){ if (l >= ql && r <= qr) return seg[pos].f; else if (l > qr || r < ql) return 0; int mid = (l + r)/2; return query(l, mid, pos*2, ql, qr) + query(mid + 1, r, pos*2 + 1, ql, qr); } void Solve(){ cin >> n >> q >> k; for (int i = 1; i <= n; i++){ cin >> a[i]; } Build(1, n, 1); while (q--){ int t; cin >> t; int x, y; cin >> x >> y; if (t == 1){ upd(1, n, 1, x, y); } else if (t == 2){ if (k != 1){ divide(1, n, 1, x, y); } } else { cout << query(1, n, 1, x, y) << "\n"; } } } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); int t = 1; //cin >> t; while (t--) Solve(); 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...