Submission #1143699

#TimeUsernameProblemLanguageResultExecution timeMemory
1143699ezzzayFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
129 ms8924 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ff first
#define ss second
#define pb push_back
#define endl '\n'
const int N=2e5+5;
int a[N];
vector<int>ans;
int bit[N];
void update(int idx, int val){
    while(idx<N){
        bit[idx]+=val;
        idx+= idx & -idx;
    }
}
int find(int idx){
    int s=0;
    while(idx>0){
        s+=bit[idx];
        idx-= idx & -idx;
    }
    return s;
}
signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,q,s,t;
	cin>>n>>q>>s>>t;
	for(int i=0;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++){
	    update(i,a[i]);
	    update(i+1,-a[i]);
	}
	int h=0;
	for(int i=1;i<=n;i++){
		int e=find(i),f=find(i-1);
		if(e>f)h-=s*abs(e-f);
		else h+=t*abs(e-f);
	}
	while(q--){
		int l,r,x;
		cin>>l>>r>>x;
		if(find(l)>find(l-1)){
			h+=s*abs(find(l)-find(l-1));
		}
		else{
			h-=t*abs(find(l)-find(l-1));
		}
		if(r!=n){
		    if(find(r+1)>find(r)){
    			h+=s*abs(find(r+1)-find(r));
    		}
    		else{
    			h-=t*abs(find(r+1)-find(r));
    		}
		}
		
		update(l,x);
		update(r+1,-x);
		
		
		
		if(find(l)>find(l-1)){
			h-=s*abs(find(l)-find(l-1));
		}
		else{
			h+=t*abs(find(l)-find(l-1));
		}
		if(r!=n){
		    if(find(r+1)>find(r)){
    			h-=s*abs(find(r+1)-find(r));
    		}
    		else{
    			h+=t*abs(find(r+1)-find(r));
    		}
		}
		
		
		ans.pb(h);
	}
	for(auto a:ans)cout<<a<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...