这题我调了整整七个小时,为了避免后来人犯同样的错误,本蒟蒻打算发一个帖子来告诫后人。
请注意,在 C 的查询中,如果你的计算方案是:
- 断环为链,在序列上求出不同位置的数量 cnt,那么段数就是 cnt+1。特别的,若项链的首尾(断环为链是断开来的两个相邻位置)颜色相同,那么段数就是 cnt 而非 cnt+1。
我就是这么认为的,但是它是错的。
为什么呢?考虑一个各个珠宝颜色都相同的项链,用这种方法算出来的答案是 cnt=0,而答案却是 1。
解决方案比较显然,就是将 C 查询的答案对 1 取 max。