Submission #113615

#TimeUsernameProblemLanguageResultExecution timeMemory
113615DiuvenSterilizing Spray (JOI15_sterilizing)C++14
100 / 100
725 ms10488 KiB
#include <bits/stdc++.h> using namespace std; typedef long long lint; typedef pair<int, int> pii; const int INF = 2e9; const int MOD = 1e9+7; const int MAX = 1e5+10; const lint LNF = 2e18; int n, q, k, A[MAX]; set<int> S; class Seg_t{ lint T[1<<18]; void upt(int v, int s, int e, int p, int x){ if(p<s || e<p) return; if(s==e){ T[v]=x; return; } upt(v*2,s,(s+e)/2,p,x); upt(v*2+1,(s+e)/2+1,e,p,x); T[v]=T[v*2]+T[v*2+1]; } lint sum(int v, int s, int e, int l, int r){ if(e<l || r<s) return 0; if(l<=s && e<=r) return T[v]; return sum(v*2,s,(s+e)/2,l,r) + sum(v*2+1,(s+e)/2+1,e,l,r); } public: void upt(int p, int x){ upt(1,1,n,p,x); } lint sum(int l, int r){ return sum(1,1,n,l,r); } } Seg; int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n>>q>>k; for(int i=1; i<=n; i++){ cin>>A[i]; Seg.upt(i, A[i]); if(A[i]!=0) S.insert(i); } for(int i=1; i<=q; i++){ int o,x,y; cin>>o>>x>>y; if(o==1){ A[x]=y, Seg.upt(x, A[x]); if(A[x]!=0) S.insert(x); } else if(o==2){ if(k==1) continue; auto lit=S.lower_bound(x), rit=S.upper_bound(y); vector<int> V; while(lit!=rit){ int p=*lit; lit++; A[p]/=k, Seg.upt(p, A[p]); if(A[p]==0) V.push_back(p); } for(int p:V) S.erase(p); } else if(o==3){ cout<<Seg.sum(x,y)<<'\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...