Submission #1300300

#TimeUsernameProblemLanguageResultExecution timeMemory
1300300trantrungkeinFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
122 ms12820 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 6;
int n,q,S,T,a[N],arr[N];
struct BIT{
    int bit[N];
    BIT(){ memset(bit,0,sizeof(bit));}
//    int n;
//    BIT(int n) : n(n){}
    void update(int id, int val){
        for(;id <= n+1; id += -id&id) bit[id]+=val;
    }
    int sum(int id){
        int res = 0;
        for(;id > 0; id-=-id&id) res += bit[id];
        return res;
    }
    int get(int l, int r){
        if(l > r) return 0;
        return sum(r) - sum(l-1);
    }
}base,bs,bt;
void Update(int x, int id, int num){
    if(x > 0) bs.update(id,num*x);
    else bt.update(id,num*x);
}
int32_t main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin >> n >> q >> S >> T;
    for(int i = 1; i <= n+1; i++){
        cin >> a[i];
        arr[i-1] = a[i] - a[i-1];
        base.update(i,a[i]-a[i-1]);
    }
    for(int i = 1; i <= n; i++){
        if(arr[i] > 0) bs.update(i,arr[i]);
        else bt.update(i,arr[i]);
    }
   // cout << bt.get(1,n) << endl;
    //cout << -S*bs.get(1,n) - T*bt.get(1,n) <<'\n';
    while(q--){
        int l,r,x;
        cin >> l >> r >> x;
        //...............
        l++;
        r++;
        base.update(l,x);
        base.update(r+1,-x);
        if(l > 1) {
            Update(arr[l-1],l-1,-1);
            arr[l-1] = base.get(1,l) - base.get(1,l-1);
            Update(arr[l-1],l-1,1);
        }
        if(r <= n) {
            Update(arr[r],r,-1);
            arr[r] = base.get(1,r+1) - base.get(1,r);
            Update(arr[r],r,1);
        }
     //   cout << bt.get(1,n) <<"GG"<< endl;
        cout << -S*bs.get(1,n) - T*bt.get(1,n) <<'\n';
    }

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...