Submission #750254

#TimeUsernameProblemLanguageResultExecution timeMemory
750254Muaath_5Sterilizing Spray (JOI15_sterilizing)C++17
100 / 100
400 ms7920 KiB
#pragma GCC optimize("O3,Ofast") #pragma GCC target("avx2") #include <bits/stdc++.h> #define ll long long #define umin(x, y) x = min(x, y) #define sq(x) ((x)*(x)) using namespace std; const int N = 1e5+5; const ll INF = 1e9 + 7; int n, q, k, c[N]; ll tree[4 * N]; void build(int l=0, int r=N-1, int node=1) { if (l == r) { tree[node] = c[l]; return; } const int mid = (l + r) / 2; build(l, mid, node*2); build(mid + 1, r, node*2+1); tree[node] = tree[node * 2] + tree[node * 2 + 1]; } void update(int idx, int val, int l =0, int r = N-1, int node=1) { if (l == r) { tree[node] = val; return; } const int mid = (l + r) / 2; if (idx <= mid) update(idx, val, l, mid, node*2); else update(idx, val, mid + 1, r, node*2+1); tree[node] = tree[node * 2] + tree[node * 2 + 1]; } ll query(int ql, int qr, int l=0, int r=N-1, int node = 1) { if (r < ql || l > qr) return 0; if (ql <= l && r <= qr) return tree[node]; const int mid = (l + r) / 2; return query(ql, qr, l, mid, node * 2) + query(ql, qr, mid + 1, r, node * 2 + 1); } int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin >> n >> q >> k; for (int i = 0; i < n; cin >> c[i++]); build(); set<int> s; for (int i = 0; i < n; i++) { if (c[i] > 0) s.insert(i); } while (q--) { int cmd, l, r; cin >> cmd >> l >> r; if (cmd == 1) { if (r > 0) s.insert(l - 1); update(l - 1, r); c[l - 1] = r; } else if (cmd == 3) cout << query(l - 1, r - 1) << '\n'; else { if (k == 1) continue; bool rem = false; auto prev = s.begin(); auto it = s.lower_bound(l - 1); const auto itr = s.lower_bound(r); for (; it != itr; it++) { if (rem) { s.erase(prev); rem = false; } const int idx = *it; c[idx] /= k; update(idx, c[idx]); if (c[idx] == 0) { rem = true; prev = it; } } if (rem) s.erase(prev); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...