比赛 |
2024暑假C班集训5 |
评测结果 |
AWWWWWWWWW |
题目名称 |
焚风现象 |
最终得分 |
10 |
用户昵称 |
Untitled |
运行时间 |
0.944 s |
代码语言 |
C++ |
内存使用 |
6.15 MiB |
提交时间 |
2024-07-05 11:10:19 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int const N=200100;
int n,q,s,t;
ll tem[N],c[N];
int lowbit(int x){
return x&-x;
}
void add(int l,int r,ll x){
if (!l && !r){
c[0]+=x;
return;
}
while (l<=n){
c[l]+=x;
l+=lowbit(l);
}
r++;
while (r<=n){
c[r]-=x;
r+=lowbit(r);
}
return;
}
ll query(int x){
if (x<0) return 0;
ll cnt=0;
while (x){
cnt+=c[x];
x-=lowbit(x);
}
return cnt;
}
int main(){
freopen("foehn.in","r",stdin);
freopen("foehn.out","w",stdout);
int a,b=0;
ll w;
scanf("%d %d %d %d",&n,&q,&s,&t);
for (int i=0;i<=n;i++){
scanf("%d",&a);
add(i,i,a);
//c[i]=a;
if (!i) continue;
if (a==b) tem[a]=tem[b];
else if (a>b) tem[i]=tem[i-1]-s*(a-b);
else tem[i]=tem[i-1]+t*(b-a);
b=a;
}
for (int x=1;x<=q;x++){
scanf("%d %d %lld",&a,&b,&w);
ll frt,bck;
ll c1=query(a-1),c2=query(a),c3=query(b),c4=query(b+1);
if (c1<c2) frt=-w*s;
else if (c1>c2 && c1>c2+w) frt=-w*t;
else frt=-(c1-c2)*t-(w-c1+c2)*s;
if (b==n) bck=0;
else if (c3>c4) bck=w*t;
else if (c3<c4 && c3+w<c4) bck=w*s;
else bck=(c4-c3)*s+(w-c4+c3)*t;
tem[n]+=frt+bck;
add(a,b,w);
printf("%lld\n",tem[n]);
}
return 0;
}