제출 #855820

#제출 시각아이디문제언어결과실행 시간메모리
855820lambd47Foehn Phenomena (JOI17_foehn_phenomena)C++14
10 / 100
529 ms17160 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int MAXN=2e5+7; struct node{ int soma,altura; }; int sobe,desce; node seg[4*MAXN]; int arr[MAXN]; node merge(node a, node b){ int retorna=0; retorna+=a.soma+b.soma; retorna-=(a.altura*(a.altura>0)*sobe+a.altura*(a.altura<0)*desce); retorna-=(b.altura*(b.altura>0)*sobe+b.altura*(b.altura<0)*desce); return{retorna,0}; } void build(int pos, int ini, int fim){ if(ini==fim){ seg[pos]={0,arr[ini]-arr[ini-1]}; return; } int m=(ini+fim)/2; int e=2*pos,d=2*pos+1; build(e,ini,m); build(d,m+1,fim); seg[pos]=merge(seg[e],seg[d]); } void query(int pos, int ini, int fim,int val, int ind,int direita){ if(ini>ind || fim<ind){ return; } if(ini==fim){ seg[pos].altura+=val*direita; return; } int m=(ini+fim)/2; int e=2*pos,d=2*pos+1; query(e,ini,m,val,ind,direita); query(d,m+1,fim,val,ind,direita); seg[pos]=merge(seg[e],seg[d]); } int32_t main(){ int n,q; cin>>n>>q>>sobe>>desce; for(int i=0;i<=n;i++){ cin>>arr[i]; } build(1,1,n); while(q--){ int a,b,val; cin>>a>>b>>val; if(a!=0)query(1,1,n,val,a,1); if(b!=n)query(1,1,n,val,b+1,-1); cout<<seg[1].soma<<"\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...