题目链接
https://atcoder.jp/contests/abc397/tasks/abc397_f
思路
令 L [ i ] L[i] L[i]表示区间 [ 1 , i ] [1,i] [1,i]中有多少个不同的数。
令 R [ i ] R[i] R[i]表示区间 [ i , n ] [i,n] [i,n]中有多少个不同的数。
令 n x t [ i ] nxt[i] nxt[i]表示下一个与 a [ i ] a[i] a[i]的值相同的数的下标。
假设我们现在已经枚举了第一个区间与第二个区间的分界点 i i i, i i i表示第二个区间的起始端点。则第一个区间 [ 1 , i ] [1,i] [1,i]对答案产生的贡献为 L [ i ] L[i] L[i]。
考虑第二个分界点 j j j( j j j表示第二个区间的终止端点)。
在区间 [ i , n ] [i,n] [i,n]中的数字,有两种情况:
- 1,这个数字只出现了一次,无论放到第二个区间还是第三个区间,都只会产生 1 1 1的贡献。
- 2,这个数字出现了多次,那么如果 j j j选在了这个数字出现两次的中间,就会让 [ i , j ] [i,j] [i,j]和 [ j + 1 , n ] [j+1,n] [j+1,n]都产生 1 1 1的贡献。
所以,对于区间 [ i , n ] [i,n] [i,n]中的数字,至少产生 1 1 1个贡献,还有可能多产生 1 1 1个贡献。
所以,最终的答案就是 m a x ( L [ i − 1 ] + R [ i ] + 多产生的贡献 ) max(L[i-1]+R[i]+多产生的贡献) max(L[i

最低0.47元/天 解锁文章
999

被折叠的 条评论
为什么被折叠?



