AtCoder Beginner Contest 397 F题(线段树)

题目链接

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值