Submission #523868

#TimeUsernameProblemLanguageResultExecution timeMemory
523868IMysticSterilizing Spray (JOI15_sterilizing)C++17
5 / 100
5046 ms3276 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; template <typename T> class fenwick { public : int n; vector<T> fen; explicit fenwick(vector<int> &a) : n(int(a.size())) { fen.resize(n); for(int i=0; i<n; i++)this->inc(i, a[i]); } T get(int p){ T v = 0; while(p >= 0){ v += fen[p]; p = (p & ( p + 1)) - 1; } return v; } T get(int l, int r){ return (get(r) - get(l - 1)); } void set(int p, T v){ v = v - get(p, p); inc(p, v); } void inc(int p, T v){ while(p < n){ fen[p] += v; p |= (p + 1); } } }; int main(){ ios_base :: sync_with_stdio(false); cin.tie(nullptr); int n, q, k; cin >> n >> q >> k; vector<int> a(n); for(int i=0; i<n; i++)cin >> a[i]; fenwick<ll> d(a); set<int> b; for(int i=0; i<n; i++)b.insert(i); for(int i=0; i<q; i++){ int t, l, r; cin >> t >> l >> r; --l, --r; if(t == 1){ d.set(l, r + 1); b.insert(l); } else if(t == 2){ while(true){ auto it = lower_bound(b.begin(), b.end(), l); if(*it > r || it == b.end())break; ll nw = d.get(*it, *it)/k; d.set(*it, nw); l = *it + 1; if(nw == 0)b.erase(*it); } }else{ cout << d.get(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...