제출 #288193

#제출 시각아이디문제언어결과실행 시간메모리
288193NemanjaSo2005Foehn Phenomena (JOI17_foehn_phenomena)C++14
0 / 100
1020 ms9468 KiB
#include<bits/stdc++.h> #define ll long long using namespace std; ll koliko[200005],povecaj,res=0,T,S,N,Q,u1,u2,r1,r2,r3,r4,segmentno[400010]; ll nadji(int gde){ ll ret=0; while(gde){ ret+=segmentno[gde]; gde/=2; } return ret; } void dodaj(int gde,int lb,int db,int l,int r){ if(lb>db or l>r) return; if(lb==l and db==r){ segmentno[gde]+=povecaj; return; } int mid=(l+r)/2; dodaj(gde*2,lb,mid,l,min(mid,r)); dodaj(gde*2+1,mid+1,db,max(l,mid+1),r); return; } int main(){ cin>>N>>Q>>S>>T; N++; for(int i=1;i<=N;i++) cin>>koliko[i]; for(int i=1;i<N;i++) if(koliko[i]<koliko[i+1]) res-=S*abs(koliko[i]-koliko[i+1]); else res+=T*abs(koliko[i]-koliko[i+1]); // cout<<res<<endl; while(Q--){ cin>>u1>>u2>>povecaj; u1++; u2++; r1=nadji(u1-1+N); r2=nadji(u1+N); r3=nadji(u2+N); r4=nadji(u2+1+N); if(u1!=1){ if(r1<r2) res+=(r2-r1)*S; else res-=(r1-r2)*T; } if(u2!=N){ if(r3<r4) res+=(r4-r3)*S; else res-=(r3-r4)*T; } // cout<<res<<endl; dodaj(1,u1,u2,1,N); r2+=povecaj; r3+=povecaj; if(u1!=1){ if(r1<r2) res-=(r2-r1)*S; else res+=(r1-r2)*T; } if(u2!=N){ if(r3<r4) res-=(r4-r3)*S; else res+=(r3-r4)*T; } /* for(int i=1;i<=N;i++) cout<<koliko[i]<<" "; cout<<endl;*/ cout<<res<<endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...