题目背景
どんな未来かは 誰もまだ知らない
那是个任谁也不会知晓的未来
でも楽しくなるはずだよ
但应该会充满乐趣吧
みんなとなら乗りこえられる
只要大伙儿同在 就能跨越难关
これからなんだねお互いがんばろうよ
现在才正要开始 彼此互相加油吧
どんな未来かは 誰もまだ知らない
那是个任谁也不会知晓的未来
でも楽しくしたホントに
不过真心期望能够充满着乐趣
みんなとなら無理したくなる
只要大伙儿同在 就会想将顾虑抛诸脑后
成長したいなまだまだ未熟DREAMER
愿能有所成长 如今还只是尚未成熟的梦想家
Aqours的成员终于到齐了。
今天,是我们全员在一起的第一场演唱会。
大家都好好练习过了,相信一定会表现得很出色的。
不过,每个人的唱功也要尽量地接近才可以呢,如果太突出或者太落后,也是会影响表现的样子。
所以我们从隔壁的学园都市借来了一个发明,可以改变我们成员的唱功呢。
题目描述
我们Aqours的成员共有N+1人,他们会列成一队。
他们的唱功以A[0]到A[N]表示,A[i](0le i le N)(0≤i≤N)均给出。
学园都市的机器可以改变队列中连续多个成员的唱功值,并将其加上一个数Z,当然当Z是负数的时候就变成减去了。
我打算一共使用这个机器Q次,每次把第X到第Y号(1le X,Yle10^61≤X,Y≤106)的成员都加上Z点唱功值。
而我们队伍的魅力值B,是这么算的:
一开始B=0,然后从第1号到第N号成员,
- 当A_{i-1}<A_iAi−1<Ai:B = B-Sdot|A_{i-1} - A_i|B=B−S∣˙Ai−1−Ai∣
- 当A_{i-1}>A_iAi−1>Ai:B = B+Tdot|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个整数,表示答案。
输入输出样例
4 3 2 3 0 5 2 4 6 1 2 1 3 4 -3 1 4 2
-9 -1 -5
说明/提示
30% 的数据 N,Qle 2000N,Q≤2000,
另外20% 的数据 S=TS=T
100%的数据 N,Qle 200000N,Q≤200000;1le S,T,A_ile10^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 ",ans); } return 0; }