Submission #1101299

#TimeUsernameProblemLanguageResultExecution timeMemory
1101299tsengangSterilizing Spray (JOI15_sterilizing)C++14
100 / 100
872 ms11908 KiB
#include <bits/stdc++.h> #define ll long long #define ff first #define ss second #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() using namespace std; ll n,q,k; struct segtree{ int n; vector<ll>d; segtree(ll n){ d.resize(4*n); build(1,1,n); } void build(ll v,ll l,ll r){ if(l==r){ d[v]=0; return; } ll m=(l+r)/2; build(v*2,l,m); build(v*2+1,m+1,r); d[v]=d[v*2]+d[v*2+1]; } ll query(ll v,ll l,ll r,ll L,ll R){ if(L>R||l>R||L>r) return 0; if(L<=l&&r<=R){ return d[v]; } ll m=(l+r)/2; return query(v*2,l,m,L,R)+query(v*2+1,m+1,r,L,R); } void update(ll v,ll l,ll r,ll pos,ll val){ if(pos<l||r<pos) return; if(l==r){ d[v]=val; return; } ll m=(l+r)/2; update(v*2,l,m,pos,val); update(v*2+1,m+1,r,pos,val); d[v]=d[v*2]+d[v*2+1]; } void updater(ll node, ll L, ll R, ll l, ll r, ll val){ if (L > R || L > r || R < l) return; if (L == R){ d[node] /= val; return; } ll mid = (L + R) / 2; updater(node*2, L, mid, l, r, val); updater(node*2 + 1, mid + 1, R, l, r, val); d[node] = d[node*2] + d[node*2+1]; } void update2(ll v,ll l,ll r,ll pos){ if(pos<l||r<pos) return; if(l==r){ d[v]/=k; return; } ll m=(l+r)>>1; update2(v*2,l,m,pos); update2(v*2+1,m+1,r,pos); d[v]=d[v*2]+d[v*2+1]; } }; int main() { cin >> n >> q >> k; ll a[n+2]; segtree gang(n); set<ll>st; for(ll i = 1; i <= n; i++){ cin >> a[i]; gang.update(1,1,n,i,a[i]); if(a[i] > 0) st.insert(i); } while(q--){ ll s,x,y; cin >> s >> x >> y; if(s == 1){ gang.update(1,1,n,x,y); if(y > 0)st.insert(x); } if(s == 2){ if(k == 1) continue; ll cur = x,i; while(!st.empty()){ auto pos = st.lower_bound(cur); if(st.end() == pos || *pos > y)break; ll i = *pos; gang.update2(1,1,n,i); if(gang.query(1,1,n,i,i) == 0){ st.erase(i); } cur = *pos+1; } } if(s == 3){ cout << gang.query(1,1,n,x,y) << '\n'; } } }

Compilation message (stderr)

sterilizing.cpp: In function 'int main()':
sterilizing.cpp:88:24: warning: unused variable 'i' [-Wunused-variable]
   88 |             ll cur = x,i;
      |                        ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...