使用的是差分,但不知道为什么样例都过不了。
如果提交会RE
代码如下:
#include <bits/stdc++.h>
using namespace std;
long long n,q,s,t,a[200005],b,f[200005];
long long f1(int p) {
if (f[p] > 0) {
return -s * f[p];
}else if (f[p] < 0){
return -t * f[p];
}
}
int main () {
scanf("%lld %lld %lld %lld",&n,&q,&s,&t);
for (int i = 1; i <= n; i++) {
scanf("%lld",&a[i]);
f[i] = a[i] - a[i-1];
b += f1(i);
}
while (q--) {
long long x,y,z;
scanf("%lld %lld %lld",&x,&y,&z);
b -= f1(x);
f[x] += z;
b += f1(x);
if (y != n) {
b -= f1(y + 1);
f[y+1] -= z;
b += f1(y + 1);
}
printf("%lld\n",b);
}
return 0;
}