Submission #539309

#TimeUsernameProblemLanguageResultExecution timeMemory
539309SlavicGFoehn Phenomena (JOI17_foehn_phenomena)C++17
100 / 100
175 ms13148 KiB
#include "bits/stdc++.h" using namespace std; #define ll long long #define forn(i,n) for(int i=0;i<n;i++) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(),v.rend() #define pb push_back #define sz(a) (int)a.size() #define int long long template<typename T, bool zero_indexing> struct fenwick_tree { int N; vector<T> fen; fenwick_tree(int n) { N = n, fen.assign(n + 1, 0); } fenwick_tree(vector<T> a) { N = a.size(); fen.assign(N + 1, 0); for(int i = 0; i < N; ++i) { add(i, a[i]); } } void add(int p, T val) { for(int i = p + zero_indexing;i <= N;i += i & -i) { fen[i] += val; } } void set(int p, T val) { T set_val = val - query(p, p); add(p, set_val); } T query(int l, int r) { T ret = 0; for(int i = r + zero_indexing; i >= 1; i -= i & -i) { ret += fen[i]; } for(int i = l + zero_indexing - 1; i >= 1; i -= i & -i) { ret -= fen[i]; } return ret; } }; ll gett(int a, int b) {return a + b;} ll upp(int a, int b) {return a + b;} void solve() { int n, q, s, t; cin >> n >> q >> s >> t; ++n; vector<int> a(n); fenwick_tree<ll, 1> st(n + 2); for(int i = 0;i < n; ++i) { cin >> a[i]; st.add(i, a[i]); st.add(i + 1, -a[i]); } ll ans = 0; for(int i = 0; i + 1 < n; ++i) { if(a[i] < a[i + 1]) { ans -= abs(a[i + 1] - a[i]) * s; } else { ans += abs(a[i] - a[i + 1]) * t; } } while(q--) { int l, r, x; cin >> l >> r >> x; ll prev = st.query(0, l - 1); ll now = st.query(0, l), next; if(prev < now) ans += abs(now - prev) * s; else ans -= abs(now - prev) * t; if(r + 1 < n) { now = st.query(0, r); next = st.query(0, r + 1); if(now < next)ans += abs(next - now) * s; else ans -= abs(now - next) * t; } st.add(l, x); st.add(r + 1, -x); prev = st.query(0, l - 1); now = st.query(0, l); if(prev < now) ans -= abs(now - prev) * s; else ans += abs(prev - now) * t; if(r + 1 < n) { now = st.query(0, r); next = st.query(0, r + 1); if(now < next)ans -= abs(next - now) * s; else ans += abs(now - next) * t; } cout << ans << "\n"; } } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t = 1; //cin >> t; while(t--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...