#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 6;
int n,q,S,T,a[N],arr[N];
struct BIT{
int bit[N];
BIT(){ memset(bit,0,sizeof(bit));}
// int n;
// BIT(int n) : n(n){}
void update(int id, int val){
for(;id <= n+1; id += -id&id) bit[id]+=val;
}
int sum(int id){
int res = 0;
for(;id > 0; id-=-id&id) res += bit[id];
return res;
}
int get(int l, int r){
if(l > r) return 0;
return sum(r) - sum(l-1);
}
}base,bs,bt;
void Update(int x, int id, int num){
if(x > 0) bs.update(id,num*x);
else bt.update(id,num*x);
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin >> n >> q >> S >> T;
for(int i = 1; i <= n+1; i++){
cin >> a[i];
arr[i-1] = a[i] - a[i-1];
base.update(i,a[i]-a[i-1]);
}
for(int i = 1; i <= n; i++){
if(arr[i] > 0) bs.update(i,arr[i]);
else bt.update(i,arr[i]);
}
// cout << bt.get(1,n) << endl;
//cout << -S*bs.get(1,n) - T*bt.get(1,n) <<'\n';
while(q--){
int l,r,x;
cin >> l >> r >> x;
//...............
l++;
r++;
base.update(l,x);
base.update(r+1,-x);
if(l > 1) {
Update(arr[l-1],l-1,-1);
arr[l-1] = base.get(1,l) - base.get(1,l-1);
Update(arr[l-1],l-1,1);
}
if(r <= n) {
Update(arr[r],r,-1);
arr[r] = base.get(1,r+1) - base.get(1,r);
Update(arr[r],r,1);
}
// cout << bt.get(1,n) <<"GG"<< endl;
cout << -S*bs.get(1,n) - T*bt.get(1,n) <<'\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... |