题意:中文题。
对于每种颜色,我们都可以看成一个集合。让后把一种颜色变成另一种颜色就转换成了把两个集合的合并问题。显然我们有一个复杂度为O(NlogN)O(NlogN)O(NlogN)的启发式合并能完美的解决这个问题。
解决合并问题了,现在需要解决如何在合并的时候更新答案呢?显然如果我们将一段连续的颜色改成另一种颜色将有三种情况,总段数可能不变,可能减一,可能减二。而如果答案要减的时候,我们只需要看一下当前数前后两个数是否为要变成的颜色,是的话就需要分情况减了。
还有个小问题,就是我们需要将集合大小小的合并到大的,这样就会产生一些小问题,比如我们小的集合是要变成的颜色。要解决也比较容易,可以开一个数组P,来映射每种颜色,如果出现上述情况的话直接交换映射的值即可。