Submission #1305715

#TimeUsernameProblemLanguageResultExecution timeMemory
1305715Tesla89Foehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
252 ms12008 KiB
#include <bits/stdc++.h>
#define tesal ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define ain(x,n) for(int i=0;i<n;i++)cin>>x[i];
#define fi first
#define se second
#define pii pair<int,int>
#define YNOut(fun) if(fun){cout<<"YES\n";}else{cout<<"NO\n";}
#define deb(arr) {for(auto i:arr){cout<<i<<' ';}cout<<'\n';}
#define int long long

using namespace std;

vector<int> seg;

void push_down(int i,int l,int r)
{
	if(l==r)return;
	seg[i<<1]+=seg[i];
	seg[i<<1|1]+=seg[i];
	seg[i]=0;
}

void build(int i,int l,int r,vector<int>&a){
	if(l==r){
		seg[i]=a[l];
		return;
	}
	int mid=l+r>>1;
	build(i<<1,l,mid,a);
	build(i<<1|1,mid+1,r,a);
}

int query(int i,int l,int r,int k)
{
	push_down(i,l,r);
	if(l==r)return seg[i];
	int mid=l+r>>1;
	if(mid>=k)return query(i<<1,l,mid,k);
	else return query(i<<1|1,mid+1,r,k);
}

void update(int i,int l,int r,int tl,int tr,int k)
{
	if(l>tr||r<tl)return;
	if(l>=tl&&r<=tr){
		seg[i]+=k;
		return;
	}
	int mid=l+r>>1;
	update(i<<1,l,mid,tl,tr,k);
	update(i<<1|1,mid+1,r,tl,tr,k);
}

signed main()
{
    tesal;
    int n,q,s,t,wind=0,ch;
    cin>>n>>q>>s>>t;
    seg.resize((n+1)<<2,0);
    vector<int>alt(n+1);
    for(int i=0;i<=n;i++)cin>>alt[i];
    for(int i=1;i<=n;i++){
    	ch=alt[i-1]-alt[i];
    	wind+=ch*(ch<0?s:t);
    }
    build(1,0,n,alt);
    while(q--){
    	int l,r,k;
    	cin>>l>>r>>k;
    	ch=query(1,0,n,l-1)-query(1,0,n,l);
    	wind-=ch*(ch<0?s:t);
    	if(r!=n){
    		ch=query(1,0,n,r)-query(1,0,n,r+1);
    		wind-=ch*(ch<0?s:t);
    	}
    	update(1,0,n,l,r,k);
    	ch=query(1,0,n,l-1)-query(1,0,n,l);
    	wind+=ch*(ch<0?s:t);
    	if(r!=n){
    		ch=query(1,0,n,r)-query(1,0,n,r+1);
    		wind+=ch*(ch<0?s:t);
    	}
    	cout<<wind<<'\n';
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...