#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[200004],st[6*200004], lazy[6*200004];
int pre[200004];
void build(int id,int l,int r) {
if(l==r) {
st[id]=a[l];
return;
}
int mid=(l+r)/2;
build(id*2,l,mid);
build(id*2+1,mid+1,r);
st[id]=st[id*2]+st[id*2+1];
}
void push(int id, int l, int r){
if(lazy[id]!=1){
st[id]+=lazy[id];
if(l!=r){
lazy[2*id]+=lazy[id];
lazy[2*id+1]+=lazy[id];
}
lazy[id]=0;
}
}
void update(int id, int l, int r, int u, int v, int val){
push(id,l,r);
if(r<u||l>v) return;
if(l>=u&&r<=v) {
lazy[id]=val;
push(id,l,r);
return;
}
int m=(l+r)/2;
update(2*id,l,m,u,v,val);
update(2*id+1,m+1,r,u,v,val);
st[id]=(st[2*id]+st[2*id+1]);
}
int get(int id,int l,int r,int u,int v) {
push(id,l,r);
if(l>v||r<u) return 0;
if(u<=l&&r<=v) {
return st[id];
}
int mid=(l+r)/2;
return get(2*id,l,mid,u,v)+get(2*id+1,mid+1,r,u,v);
}
main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n,q,s,t;
cin>>n>>q>>s>>t;
int kq=0;
for (int i=0;i<=n;i++) {
cin>>a[i];
if(i!=0) {
if(a[i]>a[i-1]) {
kq+=(a[i-1]-a[i])*s;
pre[i]=(a[i-1]-a[i])*s;
}
else {
kq+=(a[i-1]-a[i])*t;
pre[i]=(a[i-1]-a[i])*t;
}
}
}
build(1,0,n);
for (int i=1;i<=q;i++) {
int l,r,x;
cin>>l>>r>>x;
update(1,0,n,l,r,x);
int l1,r1,l2,r2;
if(l-1>=0) {
l1=get(1,0,n,l-1,l-1);
r1=get(1,0,n,l,l);
if(r1>l1) {
kq=kq-pre[l]+(l1-r1)*s;
pre[l]=(l1-r1)*s;
}
else {
kq=kq-pre[l]+(l1-r1)*t;
pre[l]=(l1-r1)*t;
}
}
if(r+1<=n) {
l2=get(1,0,n,r,r);
r2=get(1,0,n,r+1,r+1);
if(r2>l2) {
kq=kq-pre[r+1]+(l2-r2)*s;
pre[r+1]=(l2-r2)*s;
}
else {
kq=kq-pre[r+1]+(l2-r2)*t;
pre[r+1]=(l2-r2)*t;
}
}
cout<<kq<<'\n';
}
return 0;
}
Compilation message (stderr)
foehn_phenomena.cpp:49:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
49 | main()
| ^~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |