#include #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; using lint=long long; class starry_sky_tree{ int n; vector dat1,dat2; void add(int l,int r,int a,int b,int u,lint val){ if(b<=l || r<=a) return; if(l<=a && b<=r){ dat1[u]+=val; return; } add(l,r,a,(a+b)/2,2*u+1,val); add(l,r,(a+b)/2,b,2*u+2,val); dat2[u]=max(dat2[2*u+1]+dat1[2*u+1],dat2[2*u+2]+dat1[2*u+2]); } lint query_max(int l,int r,int a,int b,int u){ if(b<=l || r<=a) return 0; if(l<=a && b<=r) return dat1[u]+dat2[u]; lint res1=query_max(l,r,a,(a+b)/2,2*u+1); lint res2=query_max(l,r,(a+b)/2,b,2*u+2); return max(res1,res2)+dat1[u]; } public: starry_sky_tree(int N){ for(n=1;n a(n-1); rep(i,n-1) scanf("%lld",&a[i]); starry_sky_tree SS(n-1); rep(i,n-1) SS.add(i,i+1,a[i]+3*(n-i-1)); int q; scanf("%d",&q); rep(_,q){ int l,r; lint d; scanf("%d%d%lld",&l,&r,&d); l--; SS.add(l,r,d); printf("%lld\n",SS.query_max(0,n-1)); } return 0; }