题目描述
屎壳郎丢下的粪球在高低不平的泥路向坡底滚动着,坡上到坡底各处可以从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