#include <bits/stdc++.h>
using namespace std;
int n,q,A[200005];
long long s,t,st[800005],laz[800005],res=0;
void build(int id, int l, int r){
if (l==r){
st[id]=A[l];
return;
}
int m=(l+r)>>1;
build(id<<1,l,m);
build(id<<1|1,m+1,r);
st[id]=st[id<<1]+st[id<<1|1];
}
void fix(int id, int l, int r){
if (!laz[id]) return;
st[id]+=laz[id]*(r-l+1);
if (l!=r){
laz[id<<1]+=laz[id];
laz[id<<1|1]+=laz[id];
}
laz[id]=0;
}
void update(int id, int l, int r, int u, int v, int val){
fix(id,l,r);
if (v<l || r<u) return;
if (u<=l && r<=v){
laz[id]+=val;
fix(id,l,r);
return;
}
int m=(l+r)>>1;
update(id<<1,l,m,u,v,val);
update(id<<1|1,m+1,r,u,v,val);
st[id]=st[id<<1]+st[id<<1|1];
}
long long get(int id, int l, int r, int i){
fix(id,l,r);
if (i<l || r<i) return 0;
if (l==r) return st[id];
int m=(l+r)>>1;
if (i<=m) return get(id<<1,l,m,i);
else return get(id<<1|1,m+1,r,i);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(nullptr);
cin >> n >> q >> s >> t;
for (int i=0; i<=n; i++){
cin >> A[i];
if (i==0) continue;
if (A[i]>A[i-1]) res-=(A[i]-A[i-1])*s;
else res+=(A[i-1]-A[i])*t;
}
build(1,0,n);
while (q--){
int l,r,x; cin >> l >> r >> x;
long long val;
if (l>0){
long long beff=get(1,0,n,l-1),leff=get(1,0,n,l);
if (leff>beff) res += (leff-beff)*s;
else res -= (beff-leff)*t;
}
if (r<n){
long long reff=get(1,0,n,r),aeff=get(1,0,n,r+1);
if (aeff>=reff) res += (aeff-reff)*s;
else res -= (reff-aeff)*t;
}
update(1,0,n,l,r,x);
if (l>0){
long long bef=get(1,0,n,l-1),lef=get(1,0,n,l);
if (lef>=bef) res -= (lef-bef)*s;
else res += (bef-lef)*t;
}
if (r<n){
long long ref=get(1,0,n,r),aef=get(1,0,n,r+1);
if (aef>=ref) res -= (aef-ref)*s;
else res += (ref-aef)*t;
}
cout << res << "\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |