Submission #1101260

#TimeUsernameProblemLanguageResultExecution timeMemory
1101260tsengangSterilizing Spray (JOI15_sterilizing)C++14
15 / 100
5060 ms7240 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; 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]; } }; int main() { ll n,q,k; cin >> n >> q >> k; ll a[n+2]; for(ll i = 1; i <= n; i++){ cin >> a[i]; } segtree gang(n); for(ll i = 1; i <= n; i++)gang.update(1,1,n,i,a[i]); while(q--){ ll s,x,y; cin >> s >> x >> y; if(s == 1){ gang.update(1,1,n,x,y); } if(s == 2){ if(k == 1) continue; gang.updater(1,1,n,x,y,k); } if(s == 3){ cout << gang.query(1,1,n,x,y) << '\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...