Submission #1236879

#TimeUsernameProblemLanguageResultExecution timeMemory
1236879JelaByteEngineerSterilizing Spray (JOI15_sterilizing)C++20
100 / 100
150 ms4680 KiB
#include <bits/stdc++.h> using namespace std; #define int long long vector <int> niz; vector <int> st; int k; void build (int node, int l, int r) { if(l==r) st[node]=niz[l]; else { int mid=(l+r)/2; build(2*node, l, mid); build(2*node+1, mid+1, r); st[node]=st[2*node]+st[2*node+1]; } } void upd1(int node, int l, int r, int ind, int val) { if(l==r) { st[node]=val; niz[ind]=val; } else { int mid=(l+r)/2; if(ind<=mid) upd1(2*node, l, mid, ind, val); else upd1(2*node+1, mid+1, r, ind, val); st[node]=st[2*node]+st[2*node+1]; } } void upd2 (int node, int l, int r, int ql, int qr) { if (st[node]==0 || r<ql || l>qr) return; if (l==r) { st[node]=st[node]/k; niz[l]=niz[l]/k; } else { int mid=(l+r)/2; upd2(2*node, l, mid, ql, qr); upd2(2*node+1, mid+1, r, ql, qr); st[node]=st[2*node]+st[2*node+1]; } } int query (int node, int l, int r, int ql, int qr) { if(r<ql || l>qr) return 0; if(ql<=l && r<=qr) return st[node]; int mid=(l+r)/2; return query(2*node, l, mid, ql, qr)+query(2*node+1, mid+1, r, ql, qr); } signed main() { ios::sync_with_stdio(false); cin.tie(0); int n, q; cin>>n>>q>>k; niz.resize(n); for (int i=0; i<n; i++) cin>>niz[i]; st.resize(4*n); build(1, 0, n-1); while (q--) { int op; cin>>op; int l, r; cin>>l>>r; l--; r--; if (op==1) { r++; upd1(1, 0, n-1, l, r); } else if (op==2) { if (k!=1) upd2(1, 0, n-1, l, r); } else { cout<<query(1, 0, n-1, l, r)<<endl; } } 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...