Submission #1262001

#TimeUsernameProblemLanguageResultExecution timeMemory
1262001meisgoodSterilizing Spray (JOI15_sterilizing)C++20
100 / 100
152 ms4828 KiB
#include <bits/stdc++.h> using namespace std ; #define int long long int A[100003] ; int n,q,k ; struct SEGT{ int seg[400003] ; void build(int id,int l,int r){ if (l==r) seg[id]=A[l] ; else { int md=(l+r)/2 ; build(id*2,l,md) ; build(id*2+1,md+1,r) ; seg[id]=seg[id*2]+seg[id*2+1] ; } } void upd(int id,int l,int r,int ql,int qr){ if (seg[id]==0) return ; if (l>qr||r<ql) return ; if (l==r){ seg[id]/=k ; } else { int md=(l+r)/2 ; upd(id*2,l,md,ql,qr) ; upd(id*2+1,md+1,r,ql,qr) ; seg[id]=seg[id*2]+seg[id*2+1] ; } } void upd2(int id,int l,int r,int x,int v){ if (l==r&&l==x) seg[id]=v ; else if (l>x||r<x) return ; else { int md=(l+r)/2 ; upd2(id*2,l,md,x,v) ; upd2(id*2+1,md+1,r,x,v) ; seg[id]=seg[id*2]+seg[id*2+1] ; } } int qq(int id,int l,int r,int ql,int qr){ if (ql<=l&&r<=qr) return seg[id] ; else if (l>qr||r<ql) return 0 ; else { int md=(l+r)/2 ; return qq(id*2,l,md,ql,qr)+qq(id*2+1,md+1,r,ql,qr) ; } } } ; signed main(){ int i,j ; cin >> n >> q >> k ; for (i = 1 ; i <= n ; i ++){ cin >> A[i] ; } SEGT sgt ; sgt.build(1,1,n) ; while (q--){ int T ; int a,b ; cin >> T ; cin >> a >> b ; if (T==1){ sgt.upd2(1,1,n,a,b) ; } else if (T==2){ if (k!=1) sgt.upd(1,1,n,a,b) ; } else { cout << sgt.qq(1,1,n,a,b) << 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...