不成熟的梦想家 (未熟DREAMER)

为确保Aqours首场演唱会成功,通过调整成员唱功并计算队伍魅力值B。利用特殊机器改变指定成员的唱功值,再依据特定公式计算整体魅力值的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目背景
どんな未来かは 誰もまだ知らない

那是个任谁也不会知晓的未来

でも楽しくなるはずだよ

但应该会充满乐趣吧

みんなとなら乗りこえられる

只要大伙儿同在 就能跨越难关

これからなんだねお互いがんばろうよ

现在才正要开始 彼此互相加油吧

どんな未来かは 誰もまだ知らない

那是个任谁也不会知晓的未来

でも楽しくしたホントに

不过真心期望能够充满着乐趣

みんなとなら無理したくなる

只要大伙儿同在 就会想将顾虑抛诸脑后

成長したいなまだまだ未熟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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值