제출 #923865

#제출 시각아이디문제언어결과실행 시간메모리
923865AiperiiiFoehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
434 ms21976 KiB
#include <bits/stdc++.h> #define int long long #define ff first #define ss second #define pb push_back #define all(x) x.begin(),x.end() using namespace std; const int N=2e5+5; int a[N],ans[N*4],t[N*4]; int n,q,s,T; void build(int v,int tl,int tr){ if(tl==tr){ if(tl+1<=n){ if(a[tl+1]>a[tl])ans[v]=(a[tl]-a[tl+1])*s; else ans[v]=(a[tl]-a[tl+1])*T; } } else{ int tm=(tl+tr)/2; build(v*2,tl,tm); build(v*2+1,tm+1,tr); ans[v]=ans[v*2]+ans[v*2+1]; } } void update(int v,int tl,int tr,int pos,int x){ if(tl==tr){ ans[v]=x; } else{ int tm=(tl+tr)/2; if(pos<=tm)update(v*2,tl,tm,pos,x); else update(v*2+1,tm+1,tr,pos,x); ans[v]=ans[v*2]+ans[v*2+1]; } } void add(int v,int tl,int tr,int l,int r,int x){ if(r<tl or l>tr)return; if(l<=tl && tr<=r){ t[v]+=x; return; } int tm=(tl+tr)/2; add(v*2,tl,tm,l,r,x); add(v*2+1,tm+1,tr,l,r,x); } int get(int v,int tl,int tr,int pos){ if(tl==tr)return t[v]; else{ int tm=(tl+tr)/2; if(pos<=tm)return t[v]+get(v*2,tl,tm,pos); else return t[v]+get(v*2+1,tm+1,tr,pos); } } signed main(){ ios_base::sync_with_stdio(); cin.tie(0);cout.tie(0); cin>>n>>q>>s>>T; n++; for(int i=1;i<=n;i++){ cin>>a[i]; } build(1,1,n); while(q--){ int l,r,x; cin>>l>>r>>x; l++;r++; add(1,1,n,l,r,x); if(l-1>=1){ int a1=a[l-1]+get(1,1,n,l-1); int a2=a[l]+get(1,1,n,l); int new_val=0; if(a1<a2)new_val=(a1-a2)*s; else new_val=(a1-a2)*T; update(1,1,n,l-1,new_val); } if(r+1<=n){ int a1=a[r]+get(1,1,n,r); int a2=a[r+1]+get(1,1,n,r+1); int new_val=0; if(a1<a2)new_val=(a1-a2)*s; else new_val=(a1-a2)*T; update(1,1,n,r,new_val); } cout<<ans[1]<<"\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...