#
# @lc app=leetcode.cn id=1695 lang=python3
#
# [1695] 删除子数组的最大得分
#
# https://leetcode-cn.com/problems/maximum-erasure-value/description/
#
# algorithms
# Medium (41.98%)
# Likes:    19
# Dislikes: 0
# Total Accepted:    3.6K
# Total Submissions: 8.6K
# Testcase Example:  '[4,2,4,5,6]'
#
# 给你一个正整数数组 nums ，请你从中删除一个含有 若干不同元素 的子数组。删除子数组的 得分 就是子数组各元素之 和 。
# 
# 返回 只删除一个 子数组可获得的 最大得分 。
# 
# 如果数组 b 是数组 a 的一个连续子序列，即如果它等于 a[l],a[l+1],...,a[r] ，那么它就是 a 的一个子数组。
# 
# 
# 
# 示例 1：
# 
# 
# 输入：nums = [4,2,4,5,6]
# 输出：17
# 解释：最优子数组是 [2,4,5,6]
# 
# 
# 示例 2：
# 
# 
# 输入：nums = [5,2,1,2,5,2,1,2,5]
# 输出：8
# 解释：最优子数组是 [5,2,1] 或 [1,2,5]
# 
# 
# 
# 
# 提示：
# 
# 
# 1 
# 1 
# 
# 
#

# @lc code=start
class Solution:
    def maximumUniqueSubarray(self, nums: List[int]) -> int:
        tmp = [0]
        dic, ans, prev = {}, 0, -1
        for i,n in enumerate(nums):
            tmp.append(tmp[-1] + nums[i])
            if n in dic:
                prev = max(dic[n], prev)
            dic[n] = i
            ans = max(ans, tmp[i+1] - tmp[prev+1])
        return ans
# @lc code=end

