rt,这题我想用分块来做,然后全WA掉了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N=200005;
LL n,q,s,t;
LL l,r,x;
LL num,blong[N],add[N];
LL a[N];
LL ans;
int main()
{
scanf("%lld %lld %lld %lld",&n,&q,&s,&t);
num=sqrt(n);
for(int i=0;i<=n;i++)
scanf("%lld",&a[i]);
for(int i = 1; i <= n; i ++ )
blong[i]=ceil(i*1.0/num);
while(q--)
{
ans=0;
scanf("%lld %lld %lld",&l,&r,&x);
if(blong[l] == blong[r])
for(int i=l;i<=r;i++)
a[i]+=x;
else
{
for(int i = 1;i <= num * blong[l]; i ++ )
a[i]+=x;
for(int i = blong[l]+1; i < blong[r]; i ++ )
add[i] += x;
for(int j = (blong[r] - 1) * num + 1;j <= r; j ++ )
a[j]+=x;
}
for(int i = 1;i <= n; i ++ )
{
if(a[i] + add[blong[i]] > a[i - 1] + add[blong[i - 1]])
ans -= (a[i] + add[blong[i]] -a[i - 1] - add[blong[i - 1]])*s;
if(a[i] + add[blong[i]] < a[i - 1] + add[blong[i - 1]]);
ans += (a[i - 1] + add[blong[i - 1]] - a[i] - add[blong[i]])*t;
}
printf("%lld\n",ans);
}
return 0;
}