Submission #1273799

#TimeUsernameProblemLanguageResultExecution timeMemory
1273799duckyFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
110 ms7740 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<ll, ll>; using piii = pair<ll, pii>; #define fi first #define se second #define pb push_back const ll INF = 1e9, mod = 1e9+7, mxn = 2e5+99; ll N, M, K, S, T; ll a[mxn], bit[mxn]; void upd(ll x, ll y){ for(; x<mxn; x+=x&(-x)) bit[x] += y; } ll que(ll x){ ll res = 0; for(; x>0; x-=x&(-x))res+=bit[x]; return res; } void solve(){ cin >> N >> M >> S >> T; for(int i=0; i<=N; i++)cin >> a[i]; ll ans = 0; for(int i=1; i<=N; i++){ if(a[i-1]-a[i] < 0){ ans -= (a[i]-a[i-1])*S; }else { ans += (a[i-1]-a[i])*T; } } while(M--){ ll l, r, x; cin >> l >> r >> x; ll l1 = que(l), l2 = que(l-1); if(a[l-1]+l2 - (a[l]+l1) < 0)ans += S * (a[l]+l1 -(a[l-1]+l2)); else ans -= T * (a[l-1]+l2 - (a[l]+l1)); if(r != N){ ll r1 = que(r), r2 = que(r+1); if((a[r]+r1) - (a[r+1]+r2)< 0)ans += S * ((a[r+1]+r2) - (a[r]+r1)); else ans -= T * ((a[r]+r1) - (a[r+1]+r2)); } upd(l, x); upd(r+1, -x); l1 = que(l), l2 = que(l-1); if(a[l-1]+l2 - (a[l]+l1) < 0)ans -= S * (a[l]+l1 -(a[l-1]+l2)); else ans += T * (a[l-1]+l2 - (a[l]+l1)); if(r != N){ ll r1 = que(r), r2 = que(r+1); if((a[r]+r1) - (a[r+1]+r2)< 0)ans -= S * ((a[r+1]+r2) - (a[r]+r1)); else ans += T * ((a[r]+r1) - (a[r+1]+r2)); } cout << ans << "\n"; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); // int tc; cin >> tc; while(tc--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...