Submission #637177

#TimeUsernameProblemLanguageResultExecution timeMemory
637177tvladm2009Sterilizing Spray (JOI15_sterilizing)C++14
100 / 100
200 ms6072 KiB
#include <iostream> #define int long long using namespace std; const int MAX_N = 1e5; int a[MAX_N + 1]; int aint[4 * MAX_N + 1]; int n, q, k; void build(int v, int l, int r) { if (l == r) { aint[v] = a[l]; } else { int mid = (l + r) / 2; build(2 * v, l, mid); build(2 * v + 1, mid + 1, r); aint[v] = aint[2 * v] + aint[2 * v + 1]; } } void update(int v, int l, int r, int pos, int val) { if (l == r) { aint[v] = val; } else { int mid = (l + r) / 2; if (pos <= mid) { update(2 * v, l, mid, pos, val); } else { update(2 * v + 1, mid + 1, r, pos, val); } aint[v] = aint[2 * v] + aint[2 * v + 1]; } } void spray(int v, int l, int r, int p, int q) { if (p > q || !aint[v]) { return; } if (l == r) { aint[v] /= k; } else { int mid = (l + r) / 2; spray(2 * v, l, mid, p, min(mid, q)); spray(2 * v + 1, mid + 1, r, max(p, mid + 1), q); aint[v] = aint[2 * v] + aint[2 * v + 1]; } } int query(int v, int l, int r, int p, int q) { if (p > q) { return 0; } else if (l == p && r == q) { return aint[v]; } else { int mid = (l + r) / 2; return query(2 * v, l, mid, p, min(mid, q)) + query(2 * v + 1, mid + 1, r, max(p, mid + 1), q); } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> q >> k; for (int i = 1; i <= n; i++) { cin >> a[i]; } build(1, 1, n); for (int j = 1; j <= q; j++) { int t, l, r; cin >> t >> l >> r; if (t == 1) { update(1, 1, n, l, r); } else if (t == 2 && k > 1) { spray(1, 1, n, l, r); } else if (t == 3) { cout << query(1, 1, n, l, r) << "\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...