제출 #998309

#제출 시각아이디문제언어결과실행 시간메모리
998309OtalpFoehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
496 ms16884 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long

ll a[200100];
ll t[1200100];
int n, q, S, T;

void build(int v, int l, int r){
    if(l == r){
        if(a[l] < 0) t[v] = -a[l] * T;
        else t[v] = -a[l] * S;
        return;
    }
    int mid=(l+r)/2;
    build(v+v, l, mid);
    build(v+v+1, mid+1, r);
    t[v] = t[v + v] + t[v+v+1]; 
}
void upd(int v, int l, int r, int pos, ll x){
    if(l == r){
        a[l] += x;
        if(a[l] < 0) t[v] = -a[l] * T;
        else t[v] = -a[l] * S;
        return;
    }
    int mid = (l + r)/2;
    if(mid >= pos) upd(v+v, l, mid, pos, x);
    else upd(v+v+1, mid+1, r, pos, x);
    t[v] = t[v+v] + t[v+v+1];
}



int main(){
    cin>>n>>q>>S>>T;
    for(int i=0; i<=n; i++){
        cin>>a[i];
    }
    for(int i=n; i>=1; i--) a[i] = a[i] - a[i - 1];
    build(1, 1, n);
    //cout<<t[1]<<'\n';
    for(int i=1; i<=q; i++){
        int l, r, x;
        cin>>l>>r>>x;
        upd(1, 1, n, l, x);
        if(r + 1 <= n) upd(1, 1, n, r + 1, -x);
        cout<<t[1]<<'\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...