Submission #521856

#TimeUsernameProblemLanguageResultExecution timeMemory
521856AdamGSFoehn Phenomena (JOI17_foehn_phenomena)C++17
100 / 100
220 ms13244 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define rep(a, b) for(int a = 0; a < (b); ++a) #define st first #define nd second #define pb push_back #define all(a) a.begin(), a.end() const int LIM=2e5+7; ll tr[4*LIM], N=1; void upd(int l, int r, ll x) { l+=N; r+=N; tr[l]+=x; if(l!=r) tr[r]+=x; while(l/2!=r/2) { if(l%2==0) tr[l+1]+=x; if(r%2==1) tr[r-1]+=x; l/=2; r/=2; } } ll cnt(int v) { v+=N; ll ans=0; while(v) { ans+=tr[v]; v/=2; } return ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll n, q, s, t, ans=0; cin >> n >> q >> s >> t; while(N<=n) N*=2; rep(i, n+1) { cin >> tr[N+i]; if(tr[N+i-1]<tr[N+i]) ans-=s*(tr[N+i]-tr[N+i-1]); else ans+=t*(tr[N+i-1]-tr[N+i]); } while(q--) { int l, r, x; cin >> l >> r >> x; if(cnt(l-1)<cnt(l)) ans+=s*(cnt(l)-cnt(l-1)); else ans-=t*(cnt(l-1)-cnt(l)); if(r<n) { if(cnt(r)<cnt(r+1)) ans+=s*(cnt(r+1)-cnt(r)); else ans-=t*(cnt(r)-cnt(r+1)); } upd(l, r, x); if(cnt(l-1)<cnt(l)) ans-=s*(cnt(l)-cnt(l-1)); else ans+=t*(cnt(l-1)-cnt(l)); if(r<n) { if(cnt(r)<cnt(r+1)) ans-=s*(cnt(r+1)-cnt(r)); else ans+=t*(cnt(r)-cnt(r+1)); } cout << ans << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...