제출 #1309925

#제출 시각아이디문제언어결과실행 시간메모리
1309925okahak71Foehn Phenomena (JOI17_foehn_phenomena)C++20
0 / 100
214 ms16308 KiB
#include <bits/stdc++.h> #define ll long long #define pb push_back #define pll array<ll, 2> #define lll array<ll, 3> #define endl '\n' #define all(X) X.begin(), X.end() using namespace std; struct SGT{ vector<ll>st, lz; SGT(ll n){st.assign(4 * n + 5, 0), lz.assign(4 * n + 5, 0);} void build(ll l, ll r, ll v, vector<ll> &a){ if(l == r){ st[v] = a[l]; return ; } ll mid = (l + r) / 2; build(l , mid , v << 1, a); build(mid + 1, r , v << 1 | 1, a); st[v] = st[v << 1] + st[v << 1 | 1]; } void lazy(ll l, ll r, ll v, vector<ll> &a){ if(!lz[v]) return ; st[v] += (r - l + 1) * lz[v]; if(l != r) lz[v << 1] = lz[v << 1 | 1] = lz[v]; else a[l] += lz[v]; lz[v] = 0; } ll find(ll l, ll r, ll id, ll v, vector<ll> &a){ lazy(l, r, v, a); if(l == r) return st[v]; ll mid = (l + r) / 2; if(id <= mid) return find(l, mid, id, v << 1, a); return find(mid + 1, r, id, v << 1 | 1, a); } void upd(ll l, ll r, ll ql, ll qr, ll vl, ll v, vector<ll> &a){ lazy(l, r, v, a); if(r < ql or qr < l) return ; if(ql <= l and r <= qr){ lz[v] += vl; lazy(l, r, v, a); return ; } ll mid = (l + r) / 2; upd(l, mid, ql, qr, vl, v << 1, a); upd(mid + 1, r, ql, qr, vl, v << 1 | 1, a); st[v] = st[v << 1] + st[v << 1 | 1]; } }; void _(){ ll n, q, s, t, ans = 0; cin >> n >> q >> s >> t; vector<ll>a(n + 1); SGT sg(n + 1); for(ll &i : a) cin >> i; sg.build(1, n, 1, a); for(ll i = 0; i < n; i++){ ans += (a[i] - a[i + 1]) * (a[i] < a[i + 1] ? s : t); } while(q--){ ll l, r, x; cin >> l >> r >> x; ans -= (a[l - 1] - a[l]) * (a[l - 1] < a[l] ? s : t); if(r < n) ans -= (a[r] - a[r + 1]) * (a[r] < a[r + 1] ? s : t); sg.upd(1, n, l, r, x, 1, a); ll al = sg.find(1, n, l, 1, a); ll ar = sg.find(1, n, r, 1, a); ans += (a[l - 1] - a[l]) * (a[l - 1] < a[l] ? s : t); if(r < n) ans += (a[r] - a[r + 1]) * (a[r] < a[r + 1] ? s : t); //for(ll i = 1; i <= n; i++) cout << a[i] << ' '; cout << endl; cout << ans << endl; } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); _(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...