记录编号 589451 评测结果 WWWWWWWWWW
题目名称 焚风现象 最终得分 0
用户昵称 Gravatarliuyiche 是否通过 未通过
代码语言 C++ 运行时间 0.757 s
提交时间 2024-07-05 16:36:05 内存使用 6.26 MiB
显示代码纯文本
#include <bits/stdc++.h>
            
using namespace std;

typedef long long ll;

ll n, q, s, t, ans = 0;
ll a[200005];
ll c[200005];
    
int main()
{
    freopen("foehn.in", "r", stdin);
    freopen("foehn.out", "w", stdout);
        
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
            
    cin >> n >> q >> s >> t;
    for(int i = 0; i <= n; ++i)
        cin >> a[i];
    for(int i = 1; i <= n; ++i)
        c[i] = a[i]-a[i-1];
    for(int j = 1; j <= n; ++j)
    {
        if(a[j] > a[j-1])
            ans -= s*(a[j]-a[j-1]);
        else if(a[j] < a[j-1])
            ans += t*(a[j-1]-a[j]);
    }
    //cout << ans << '\n';
    for(int i = 1; i <= q; ++i)
    {
        ll l, r, x;
        cin >> l >> r >> x;
        ll tmp = x;
        if(r == n)
        {
            
        } 
        if(x > 0)
        {
            if(c[l] > 0)
                ans -= x*s;
            else
            {
                if(c[l]+x <= 0)
                    ans -=x*t;
                else
                {
                    ans -= abs(c[l])*t;
                    x += c[l];
                    ans -= x*s;
                }
            }
            if(r != n)
            {
                if(c[r+1] < 0)
                ans += x*t;
            else
            {
                if(x-c[r+1] < 0)
                    ans += x*s;
                else
                {
                    ans += c[r+1]*s;
                    x -= c[r+1];
                    ans += x*t;
                }
            }
            }
        }
        else if(x < 0)
        {
            x = -x;
            if(c[l] > 0)
            {
                if(c[l]-x > 0)
                    ans += x*s;
                else
                {
                    ans += c[l]*s;
                    x -= c[l];
                    ans += x*t;
                }
            }
            else
                ans += x*t;
            if(r != n)
            {
                if(c[r+1] > 0)
                ans -= x*s;
            else
            {
                if(-c[r+1]-x > 0)
                    ans -= x*t;
                else
                {
                    ans -= -c[r+1]*t;
                    x += c[r+1];
                    ans -= x*s;
                }
            }
            }
        }
        cout << ans << '\n';
        c[l] += tmp;
        c[r+1] -= tmp;
    }
    
   	return 0;
}