最新公告
  • 欢迎您光临信息学奥赛网,一个优质的信息学编程题库和信息学编程学习资源专业网站。欢迎加入VIP
  • 问题 BP: L9-6 差分进阶 - 练习10

    正文概述 网友投稿   2026-01-22 11:17:21  

    题目描述

    屎壳郎丢下的粪球在高低不平的泥路向坡底滚动着,坡上到坡底各处可以从1到n编号,编号为i的地方海拔高度为ai。粪球在滚动的过程中,海拔高度每增加1,速度就减少S,海拔高度每减少1,速度就增加T。初始的海拔高度和速度都视为0。小帅想知道如果编号L到R的地点海拔都增加X,那么粪球到坡底也就是N号点的速度为多少,小帅有Q次疑问,每次询问修改海拔高度后都要输出粪球最终的速度。 小帅编写了一个程序,还剩下计算海拔高度变化对粪球速度的影响的cal函数没有完成,请你把横线处修改为正确的代码吧。

    #include <iostream>
    using namespace std;
    long long a[200005], d[200005];
    int N, Q;
    long long S, T;
    int L, R;
    long long X, ans;
    long long cal(long long d)
    {
        if (d > 0)
        {
            return -d * S;
        }
        else
        {
            return -d * T;
        }
    }
    int main()
    {
        cin >> N >> Q >> S >> T;
        for (int i = 0; i <= N; i++)
        {
            cin >> a[i];
        }
        for (int i = 1; i <= N; i++)
        {
            d[i] = a[i] - a[i - 1];
            ——————————
        }
        for (int i = 0; i < Q; i++)
        {
            cin >> L >> R >> X;
            ans -=cal(d[L]);
            d[L]+=X;
            ——————————
            if (R < N)
            {
                ans -= cal(d[R+1]);
                d[R+1]-=X;
                ——————————
            }
            cout << ans << endl;
        }
        return 0;
    }

    输入

    第一行四个整数,分别表示N,Q,S,T。(1≤N,Q≤200000,0≤S,T≤100000) 第二行N+1个整数a0到an,分别表示编号是0到N的地点的海拔高度。(地点0表示起点,a0的值一定为0) 接下来Q行,每行三个整数L,R,X,每行表示小帅的一次询问。(-100000≤X≤100000)

    输出

    共Q行,每行一个整数,分别表示小帅每次询问把L到R的海拔高度都增加X后,粪球从起点滚动到坡底N号点时的速度。

    样例输入

    5 4 1 2
    0 -1 -2 -3 0 -1
    3 5 -2
    2 2 2
    3 4 -3
    2 2 1

    样例输出

    9
    10
    12
    13
    信息学奥赛网,一个优质的源码资源平台!
    信息学奥赛网 » 问题 BP: L9-6 差分进阶 - 练习10