classSolution{public:vector<longlong>maximumSegmentSum(vector<int>&nums,vector<int>&removeQueries){constintn=nums.size();longmaxSum=0;vector<longlong>ans(n);// For the segment [l, r], record its sum in sum[l] and sum[r]vector<longlong>sum(n);// For the segment [l, r], record its count in count[l] and count[r]vector<int>count(n);for(inti=n-1;i>=0;--i){ans[i]=maxSum;constintj=removeQueries[i];// Calculate `segmentSum`.constlongleftSum=j>0?sum[j-1]:0;constlongrightSum=j+1<n?sum[j+1]:0;constlongsegmentSum=nums[j]+leftSum+rightSum;// Calculate `segmentCount`.constintleftCount=j>0?count[j-1]:0;constintrightCount=j+1<n?count[j+1]:0;constintsegmentCount=1+leftCount+rightCount;// Update the sum and count of the segment [l, r].constintl=j-leftCount;constintr=j+rightCount;sum[l]=segmentSum;sum[r]=segmentSum;count[l]=segmentCount;count[r]=segmentCount;maxSum=max(maxSum,segmentSum);}returnans;}};
classSolution{publiclong[]maximumSegmentSum(int[]nums,int[]removeQueries){finalintn=nums.length;longmaxSum=0;long[]ans=newlong[n];// For the segment [l, r], record its sum in sum[l] and sum[r]long[]sum=newlong[n];// For the segment [l, r], record its count in count[l] and count[r]int[]count=newint[n];for(inti=n-1;i>=0;--i){ans[i]=maxSum;finalintj=removeQueries[i];// Calculate `segmentSum`.finallongleftSum=j>0?sum[j-1]:0;finallongrightSum=j+1<n?sum[j+1]:0;finallongsegmentSum=nums[j]+leftSum+rightSum;// Calculate `segmentCount`.finalintleftCount=j>0?count[j-1]:0;finalintrightCount=j+1<n?count[j+1]:0;finalintsegmentCount=1+leftCount+rightCount;// Update the sum and count of the segment [l, r].finalintl=j-leftCount;finalintr=j+rightCount;sum[l]=segmentSum;sum[r]=segmentSum;count[l]=segmentCount;count[r]=segmentCount;maxSum=Math.max(maxSum,segmentSum);}returnans;}}
classSolution:defmaximumSegmentSum(self,nums:list[int],removeQueries:list[int],)->list[int]:n=len(nums)maxSum=0ans=[0]*n# For the segment [l, r], record its sum in summ[l] and summ[r]summ=[0]*n# For the segment [l, r], record its count in count[l] and count[r]count=[0]*nforiinreversed(range(n)):ans[i]=maxSumj=removeQueries[i]# Calculate `segmentSum`.leftSum=summ[j-1]ifj>0else0rightSum=summ[j+1]ifj+1<nelse0segmentSum=nums[j]+leftSum+rightSum# Calculate `segmentCount`.leftCount=count[j-1]ifj>0else0rightCount=count[j+1]ifj+1<nelse0segmentCount=1+leftCount+rightCount# Update `summ` and `count` of the segment [l, r].l=j-leftCountr=j+rightCountsumm[l]=segmentSumsumm[r]=segmentSumcount[l]=segmentCountcount[r]=segmentCountmaxSum=max(maxSum,segmentSum)returnans
Thanks for stopping by! If you find this site helpful, consider buying me some protein powder to keep me fueled! π