Submission #1012340

#TimeUsernameProblemLanguageResultExecution timeMemory
1012340zazaSterilizing Spray (JOI15_sterilizing)C++14
100 / 100
844 ms10744 KiB
#include <bits/stdc++.h> using namespace std; int n, q, k; int a[100005]; long long st[4 * 100005]; set<int> S[15]; void build(int id = 1, int l = 1, int r = n) { if (l == r) { st[id] = a[l]; return; } int mid = (l + r) / 2; build(id * 2, l, mid); build(id * 2 + 1, mid + 1, r); st[id] = st[id * 2] + st[id * 2 + 1]; } void upd(int i, int v) { int id = 1, l = 1, r = n; while (l < r) { int mid = (l + r) / 2; id *= 2; if (i <= mid) { r = mid; } else { l = mid + 1; id++; } } st[id] = v; while (id > 1) { id /= 2; st[id] = st[id * 2] + st[id * 2 + 1]; } } long long get(int i, int j, int id = 1, int l = 1, int r = n) { if (i <= l && r <= j) { return st[id]; } int mid = (l + r) / 2; if (i <= mid && mid < j) { return get(i, j, id * 2, l, mid) + get(i, j, id * 2 + 1, mid + 1, r); } if (mid < i) { return get(i, j, id * 2 + 1, mid + 1, r); } return get(i, j, id * 2, l, mid); } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> q >> k; for (int i = 1; i <= n; ++i) { cin >> a[i]; } build(); for (int i = 1; i <= n; ++i) { if (a[i]) { S[a[i] % k].emplace(i); } } while (q--) { int s, t, u; cin >> s >> t >> u; if (s == 1) { S[a[t] % k].erase(t); a[t] = u; S[a[t] % k].emplace(t); upd(t, a[t]); } else if (s == 2) { if (k == 1) { continue; } vector<int> v; for (int i = 0; i <= k - 1; ++i) { set<int>::iterator it = S[i].lower_bound(t); while (it != S[i].end() && *it <= u) { v.emplace_back(*it); it = next(it); } } for (int i: v) { S[a[i] % k].erase(i); a[i] /= k; if (a[i]) { S[a[i] % k].emplace(i); } upd(i, a[i]); } } else { cout << get(t, u) << '\n'; } cout << '\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...