小塔很喜欢给玻璃珠染成不同的颜色,他现在有一排N个玻璃珠,第i个玻璃珠的颜色是ci,他现在有M种颜色,他希望找到最长的一串颜色相同的玻璃珠(一串表示下标是连续的),他现在有K次操作可以把K个位置的玻璃珠染成任意的颜色。
小塔想知道,经过最多K次操作之后,它可以得到的最长的一串颜色相同的玻璃珠是多长?
注意:你最多对K个位置染色,你也可以选择不染色。
此题是一个贪心加双指针的问题,可以对任意位置进行染色,所以我们可以对每一种颜色来单独看待,对于每一种颜色我们记录这一种颜色所出现的所有的位置,若我们想要得到最长的连续,最优的一定是利用染色去“连接”记录位置中每一段,即去填补两段相同颜色之间的空缺,填补完后剩下的次数不足以补足即可以接在最长的段两旁,所以对于每一种颜色我们可以用双指针枚举要填补的所有空缺段后最长段的左右节点,之所以可以用双指针枚举,因为对于有限染色次数,当固定一个端点后另一端点的位置是符合单调性的
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;