比赛 2024暑假C班集训5 评测结果 TTTTTTTTTT
题目名称 焚风现象 最终得分 0
用户昵称 ┭┮﹏┭┮ 运行时间 10.000 s
代码语言 C++ 内存使用 56.09 MiB
提交时间 2024-07-05 09:58:17
显示代码纯文本
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define db double
  5. #define in inline
  6. const int N = 2e5+10,M = N<<3;
  7. const ll inf = 1e17;
  8.  
  9.  
  10. ll read(){
  11. ll x = 0,f = 1;char c = getchar();
  12. for(;c < '0' || c > '9';c = getchar())if(c == '-')f = -1;
  13. for(;c >= '0' && c <= '9';c = getchar())x = (x<<1) + (x<<3) + c-'0';
  14. return x * f;
  15. }
  16.  
  17. int n,m;
  18. ll a[N],S,T;
  19.  
  20. struct segment{
  21. ll s[M],lm[M],rm[M],la[M];
  22. void pushup(int p){
  23. lm[p] = lm[p<<1],rm[p] = rm[p<<1|1];
  24. s[p] = s[p<<1] + s[p<<1|1];
  25. int ls = rm[p<<1],rs = lm[p<<1|1];
  26. if(ls > rs)s[p] += T * (ls - rs);
  27. else if(rs > ls)s[p] -= S * (rs - ls);
  28. }
  29. void pushdown(int p){
  30. lm[p<<1] += la[p],lm[p<<1|1] += la[p];
  31. rm[p<<1] += la[p],rm[p<<1|1] += la[p];
  32. la[p<<1] += la[p],la[p<<1|1] += la[p];
  33. la[p] = 0;
  34. }
  35. void build(int p,int l,int r){
  36. if(l == r)return lm[p] = rm[p] = a[l],void();
  37. int mid = l + r >> 1;
  38. build(p<<1,l,mid),build(p<<1|1,mid+1,r);
  39. pushup(p);
  40. }
  41. void modify(int p,int l,int r,int L,int R,ll z){
  42. if(L <= l && r <= R)return la[p] += z,lm[p] += z,rm[p] += z,void();
  43. int mid = l + r >> 1;
  44. pushdown(p);
  45. if(L <= mid)modify(p<<1,l,mid,L,R,z);
  46. if(R > mid)modify(p<<1|1,mid+1,r,L,R,z);
  47. pushup(p);
  48. }
  49. }t;
  50.  
  51. ll ans = 0;
  52. int main(){
  53. freopen("foehn-13.in","r",stdin);
  54. freopen("foehn.out","w",stdout);
  55. n = read() + 1,m = read(),S = read(),T = read();
  56. for(int i = 1;i <= n;i++)a[i] = read();
  57. t.build(1,1,n);
  58. for(int i = 1;i <= m;i++){
  59. int l = read()+1,r = read()+1;ll z = read();
  60. t.modify(1,1,n,l,r,z);
  61. printf("%lld\n",t.s[1]);
  62. }
  63. return 0;
  64. }