Submission #998521

#TimeUsernameProblemLanguageResultExecution timeMemory
998521spensaFoehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
92 ms14672 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define pb push_back #define pii pair<int,int> #define FOR(i, a, b) for(int i=(signed)(a); i<=(signed)(b); i++) #define F0R(i, a) for(int i=(0); i<(signed)(a); i++) const int MXN = 2e5 + 10; ll arr[MXN] = {0}; ll updL[MXN] = {0}; ll updR[MXN] = {0}; int main(){ //faster io ios_base::sync_with_stdio(false); cin.tie(NULL); ll N, Q, S, T; cin>>N>>Q>>S>>T; ll ans = 0; cin>>arr[0]; //always zero FOR(i, 1, N){ cin>>arr[i]; if(arr[i-1]<arr[i]){ ans -= S * abs(arr[i]-arr[i-1]); } else{ ans += T * abs(arr[i]-arr[i-1]); } } // FOR(i, 1, N) cout<<arr[i]<<" "; // cout<<"\n"; // cout<<"ans="<<ans<<"!"; ll L, R, X; while(Q--){ cin>>L>>R>>X; // upd[L]+=X; if(((arr[L-1]+updR[L-1])<(arr[L]+updL[L])) && ((arr[L-1]+updR[L-1])>=(arr[L]+updL[L]+X))) { ans += (S * abs((arr[L-1]+updR[L-1])-(arr[L]+updL[L]))); ans += (T * abs((arr[L-1]+updR[L-1])-(arr[L]+updL[L]+X))); } else if(((arr[L-1]+updR[L-1])>=(arr[L]+updL[L])) && ((arr[L-1]+updR[L-1])<(arr[L]+updL[L]+X))) { ans-= (T * abs((arr[L-1]+updR[L-1])-(arr[L]+updL[L]))); ans-= (S * abs((arr[L-1]+updR[L-1])-(arr[L]+updL[L]+X))); } else{ if((arr[L-1]+updR[L-1])<(arr[L]+updL[L]+X)) ans -= (S*X); else ans -= (T*X); } if(R==N){ updL[L]+=X; // if(L!=R) updR[R]+=X; cout<<ans<<"\n"; continue; } if(((arr[R]+updR[R])<(arr[R+1]+updL[R+1])) && ((arr[R]+updR[R]+X)>=(arr[R+1]+updL[R+1]))) { ans+= (S * abs((arr[R]+updR[R])-(arr[R+1]+updL[R+1]))); ans+= (T * abs((arr[R]+updR[R]+X)-(arr[R+1]+updL[R+1]))); } else if(((arr[R]+updR[R])>=(arr[R+1]+updL[R+1])) && ((arr[R]+updR[R]+X)<(arr[R+1]+updL[R+1]))) { ans-= (T * abs((arr[R]+updR[R])-(arr[R+1]+updL[R+1]))); ans-= (S * abs((arr[R]+updR[R]+X)-(arr[R+1]+updL[R+1]))); } else{ if((arr[R]+updR[R]+X)<(arr[R+1]+updL[R+1])) ans += (S*X); else ans += (T*X); } updL[L]+=X; // if(L!=R) updR[R]+=X; cout<<ans<<"\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...