Submission #332058

#TimeUsernameProblemLanguageResultExecution timeMemory
332058maozkurtFoehn Phenomena (JOI17_foehn_phenomena)C++17
100 / 100
141 ms10732 KiB
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <ctime> #include <iostream> #include <algorithm> #include <queue> #include <map> #include <set> #include <vector> #include <string> #include <stack> #include <numeric> #include <cassert> #define endl '\n' #define sp ' ' #define pb push_back #define mp make_pair #define ff first #define ss second using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; #define int ll const int maxn = 200005; int arr[maxn]; int pre[maxn]; int eksi[maxn]; int32_t main(){ ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cerr.tie(nullptr); int n,q,s,t;cin>>n>>q>>s>>t; for(int i=0;i<=n;i++) cin>>arr[i]; ll ans = 0; for(int i=1;i<=n;i++){ pre[i] = arr[i]-arr[i-1]; if(pre[i]<0){ eksi[i] = -1; ans += t*abs(pre[i]); } else if(pre[i]>0){ eksi[i] = 1; ans -= s*(pre[i]); } } while(q--){ int l,r,ek;cin>>l>>r>>ek; if(ek>0){ if(pre[l] >= 0){ ans -= ek*s; }else{ ans -= min(ek,abs(pre[l]))*t + max(0LL,pre[l] + ek)*s; } } else if(ek<0){ if(pre[l] <= 0){ ans += t*(abs(ek)); } else{ ans += min(abs(ek),pre[l])*s + max(0LL,abs(ek)-pre[l])*t; } } ek = -ek; if(r+1<=n){ if(ek>0){ if(pre[r+1] >= 0){ ans -= ek*s; }else{ ans -= min(ek,abs(pre[r+1]))*t + max(0LL,pre[r+1] + ek)*s; } } else if(ek<0){ if(pre[r+1] <= 0){ ans += t*(abs(ek)); } else{ ans += min(abs(ek),pre[r+1])*s + max(0LL,abs(ek)-pre[r+1])*t; } } } ek = -ek; pre[l] += ek; pre[r+1] -= ek; /* if(ek>0){ if(pre[l]>=0){ ans += ek*t; } else{ ans += min(abs(pre[l]),ek)*s + max(0,ek-abs(pre[l])) * t; } }else if(ek < 0){ if(pre[l]<=0){ ans += ek * s; // ek < 0 } else{ ans -= min(pre[l],abs(ek))*t + max(0,abs(ek) - pre[l]) * s; } } if(r+1<=n){ if(ek>0){ if(pre[r+1] <= 0){ ans -= ek*s; } else{ ans -= min(pre[r+1],ek)*t + max(0,ek-abs(pre[r+1]))*s; } } else if(ek < 0){ if(pre[r+1] >= 0){ ans += ek*s; } else{ ans } } } pre[l] += ek; pre[r+1] -= ek; */ /* pre[l] += ek; pre[r+1] -= ek; if(eksi[l] == -1 && pre[l]>=0){ if(pre[l]==0) ans+=s; else ans += s + t; } else if(eksi[l] == 1 && pre[l] <= 0){ if(pre[l]==0) ans -= t; else ans -= s + t; } else if(eksi[l] == 0 && pre[l] < 0){ ans -= s; } else if(eksi[l] == 0 && pre[l] > 0){ ans += t; } if(r+1<n){ if(eksi[r+1] == -1 && pre[r+1]>=0){ if(pre[r+1]==0) ans+=s; else ans += s + t; } else if(eksi[r+1] == 1 && pre[r+1] <= 0){ if(pre[r+1]==0) ans -= t; else ans -= s + t; } else if(eksi[r+1] == 0 && pre[r+1] < 0){ ans -= s; } else if(eksi[r+1] == 0 && pre[r+1] > 0){ ans += t; } } eksi[l] = (pre[l]==0 ? 0 : (pre[l] < 0 ? -1 : 1)); eksi[r+1] = (pre[r+1]==0 ? 0 : (pre[r+1] < 0 ? -1 : 1)); */ cout << ans << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...