Submission #602406

#TimeUsernameProblemLanguageResultExecution timeMemory
602406HanksburgerSterilizing Spray (JOI15_sterilizing)C++17
5 / 100
5082 ms110344 KiB
#include <bits/stdc++.h> using namespace std; long long seg[400005], a[100005]; set<int> s[400005], t; int n, q, k; void build(int i, int l, int r) { if (l==r) { seg[i]=a[l]; if (a[l]) s[i].insert(l); return; } int mid=(l+r)/2; build(i*2, l, mid); build(i*2+1, mid+1, r); seg[i]=seg[i*2]+seg[i*2+1]; s[i].insert(s[i*2].begin(), s[i*2].end()); s[i].insert(s[i*2+1].begin(), s[i*2+1].end()); } void update(int i, int l, int r, int y, int z) { if (l==r) { seg[i]=a[y]=z; s[i].erase(y); if (z) s[i].insert(y); return; } int mid=(l+r)/2; if (y<=mid) update(i*2, l, mid, y, z); else update(i*2+1, mid+1, r, y, z); seg[i]=seg[i*2]+seg[i*2+1]; s[i].erase(y); if (z) s[i].insert(y); } void spray(int i, int l, int r, int y, int z) { // cout << "spray " << l << ' ' << r << '\n'; if (y<=l && r<=z) { t.insert(s[i].begin(), s[i].end()); return; } int mid=(l+r)/2; if (l<=z && y<=mid) spray(i*2, l, mid, y, z); if (mid+1<=z && y<=r) spray(i*2+1, mid+1, r, y, z); } long long query(int i, int l, int r, int y, int z) { if (y<=l && r<=z) return seg[i]; int mid=(l+r)/2; long long res=0; if (l<=z && y<=mid) res+=query(i*2, l, mid, y, z); if (mid+1<=z && y<=r) res+=query(i*2+1, mid+1, r, y, z); return res; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> q >> k; for (int i=1; i<=n; i++) cin >> a[i]; build(1, 1, n); while (q--) { int x, y, z; cin >> x >> y >> z; if (x==1) update(1, 1, n, y, z); else if (x==2) { t.clear(); spray(1, 1, n, y, z); for (int i:t) // { // cout << "i=" << i << '\n'; update(1, 1, n, i, a[i]/k); // } } else cout << query(1, 1, n, y, z) << '\n'; // for (int i=1; i<=n; i++) // cout << a[i] << ' '; // cout << '\n'; // for (int i:s[1]) // cout << i << '\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...