Submission #636156

#TimeUsernameProblemLanguageResultExecution timeMemory
636156Ronin13Foehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
147 ms13040 KiB
#include<bits/stdc++.h> #define ll long long #define ull unsigned ll #define f first #define s second #define pii pair<int,int> #define pll pair<ll,ll> #define pb push_back #define epb emplace_back using namespace std; const int NMAX = 2e5 + 1; vector <ll> bit(NMAX); vector <ll> a(NMAX); int lsb(int x){ return x & -x; } int n; void add(int pos, ll v){ while(pos <= n){ bit[pos] += v; pos += lsb(pos); } return; } ll get(int pos){ ll sum = 0; while(pos){ sum += bit[pos]; pos -= lsb(pos); } return sum; } ll s, t; ll ans = 0; void upd(int pos, ll x){ ll v = get(pos) + a[pos]; ll u = get(pos - 1) + a[pos - 1]; if(v > u) ans += (u- v) * s * x; else ans += (u - v) * t * x; } int main(){ ios_base::sync_with_stdio(false);cin.tie(0); cin >> n; int q; cin >> q; cin >> s >> t; for(int i = 0; i <= n; i++){ cin >> a[i]; } for(int i = 1; i <= n; i++){ if(a[i] > a[i - 1]) ans -= (a[i] - a[i - 1]) * s; else ans += (a[i - 1] - a[i]) * t; } while(q--){ int l, r; cin >> l >> r; ll v; cin >> v; upd(l, -1); // cout << ans << "\n"; if(r < n) upd(r + 1, -1); add(l, v); add(r + 1, -v); upd(l, 1); if(r < n) upd(r + 1, 1); cout << ans << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...