题目背景
どんな未来かは 誰もまだ知らない
那是个任谁也不会知晓的未来
でも楽しくなるはずだよ
但应该会充满乐趣吧
みんなとなら乗りこえられる
只要大伙儿同在 就能跨越难关
これからなんだねお互いがんばろうよ
现在才正要开始 彼此互相加油吧
どんな未来かは 誰もまだ知らない
那是个任谁也不会知晓的未来
でも楽しくしたホントに
不过真心期望能够充满着乐趣
みんなとなら無理したくなる
只要大伙儿同在 就会想将顾虑抛诸脑后
成長したいなまだまだ未熟DREAMER
愿能有所成长 如今还只是尚未成熟的梦想家
Aqours的成员终于到齐了。
今天,是我们全员在一起的第一场演唱会。
大家都好好练习过了,相信一定会表现得很出色的。
不过,每个人的唱功也要尽量地接近才可以呢,如果太突出或者太落后,也是会影响表现的样子。
所以我们从隔壁的学园都市借来了一个发明,可以改变我们成员的唱功呢。
题目描述
我们Aqours的成员共有N+1人,他们会列成一队。
他们的唱功以A[0]到A[N]表示,A[i](0\le i \le N)(0≤i≤N)均给出。
学园都市的机器可以改变队列中连续多个成员的唱功值,并将其加上一个数Z,当然当Z是负数的时候就变成减去了。
我打算一共使用这个机器Q次,每次把第X到第Y号(1\le X,Y\le10^61≤X,Y≤106)的成员都加上Z点唱功值。
而我们队伍的魅力值B,是这么算的:
一开始B=0,然后从第1号到第N号成员,
当A_{i-1}<A_iAi−1<Ai:B = B-S\dot|A_{i-1} - A_i|B=B−S∣˙Ai−1−Ai∣
当A_{i-1}>A_iAi−1>Ai:B = B+T\dot|A_{i-1} - A_i|B=B+T∣˙Ai−1−Ai∣ 其中S和T是LoveLive组委会给我们的常数。
果然,我是バカチカ(笨蛋千歌)呢,所以作为领导我永远排在队伍的开头,唱功永远是0,机器也不会改到我头上呢。
你能帮我们算算,我每次使用完这个机器之后,成员的魅力B是多少吗?
输入格式
第一行4个整数,N,Q,S,T,各个变量在描述中已经解释
接下来N+1行,每行一个数整数Ai,其中A0=0
接下来Q行,每行3个整数,X,Y,Z各个变量在描述中已经解释
输出格式
Q个整数,表示答案。
输入输出样例
输入 #1复制
4 3 2 3
0
5
2
4
6
1 2 1
3 4 -3
1 4 2
输出 #1复制
-9
-1
-5
说明/提示
30% 的数据 N,Q\le 2000N,Q≤2000,
另外20% 的数据 S=TS=T
100%的数据 N,Q\le 200000N,Q≤200000;1\le S,T,A_i\le10^61≤S,T,Ai≤106;|Z|\le 10^6∣Z∣≤106 请注意可能需要使用int64,cin/cout可能超时。
样例解释:
第一次变化后,
A 0 6 3 4 6
B -12 -3 -5 -9
以下是彩蛋
没有。
哪来的那么多彩蛋?
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
ll s1,s2;
ll dif[300001];
ll get(ll t)
{
if(t>0)return -s1*t;
else return -s2*t;
}
int main()
{
int num,query;
scanf("%d%d%lld%lld",&num,&query,&s1,&s2);
vector<int>v;
for(int i=0;i<=num;i++)
{
int z;
scanf("%d",&z);
v.push_back(z);
}
ll ans=0;
for(int i=0;i<num;i++)
{
dif[i]=v[i+1]-v[i];
ans+=get(dif[i]);
}
for(int i=0;i<query;i++)
{
int za,zb,zc;
scanf("%d%d%d",&za,&zb,&zc);
ans-=get(dif[za-1]);
dif[za-1]+=zc;
ans+=get(dif[za-1]);
if(zb!=num)
{
ans-=get(dif[zb]);
dif[zb]-=zc;
ans+=get(dif[zb]);
}
printf("%lld\n",ans);
}
return 0;
}