思路

考虑比较朴素的解法,枚举每个长度为\(k+1\)的区间,然后统计区间中出现次数最多的颜色。这样的话复杂度为\(O(n*k)\)的,显然不行。

观察到统计每个区间中出现次数最多的颜色中,可以只用看每种颜色在区间中出现的最后一个位置,这样的话只需要我们开个桶统计一下数量就行。

所以就类似于尺取那样,维护颜色种类不超过\(k+1\)的区间,对于每次新加进来的值令其\(cnt++\),并且维护ans。当颜色种类超过\(k+1\)时,就减去区间前面的值,因为它们与后面的颜色不可能再连在一起了。

因为每个位置都会被指针扫到最多两次,所以复杂度是\(O(n)\)的。

直接看代码好了,注意要离散化一下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 5;
int n, k;
int a[N], b[N];
int cnt[N];
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n >> k;
for(int i = 1; i <= n; i++) cin >> a[i], b[i] = a[i] ;
sort(b + 1, b + n + 1);
int D = unique(b + 1, b + n + 1) - b - 1;
for(int i = 1; i <= n; i++) a[i] = lower_bound(b + 1, b + n + 1, a[i]) - b;
int num = 0, ans = 1;
for(int l = 1, r = 0; r <= n;) {
r++;
if(cnt[a[r]]++ == 0) num++;
while(num > k + 1) {
cnt[a[l++]]--;
if(!cnt[a[l - 1]]) num--;
}
ans = max(ans, cnt[a[r]]) ;
}
cout << ans;
return 0;
}

最新文章

  1. Discuz!用户注册,登陆,生成帖子功能实现
  2. CLR via C#(04)- 本是同根生
  3. webservice的Axis2入门教程java版
  4. SAE java应用读写文件(TmpFS和Storage)-----绝世好代码
  5. sublime text3 本地化
  6. idea 14 svn安装
  7. java functional syntax overview
  8. Ubuntu 误改/etc/sudoers 文件权限
  9. SpringMVC——从HelloWorld
  10. HDU 2018 undefined
  11. MySQL timestamp NOT NULL插入NULL的问题
  12. 小甲鱼OD学习第7讲
  13. PHP 【一】
  14. 服务器资源监控插件(jmeter)
  15. navLI鼠标滑上显示下拉导航
  16. 强化学习4-时序差分TD
  17. asp.net query string 及 form data 遇到的编码问题
  18. 021.Zabbix的邮件告警-01
  19. appium+python+unittest 测试用例的几种加载执行方式
  20. 怎样通过terminal得到AWS EC2 instance的ip

热门文章

  1. linux 系统时间 EST CST
  2. 安装gerrit服务器
  3. ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程(获取第三方平台access_token)
  4. osx或windows系统下,用ftp上传文件到阿里云虚拟主机脚本
  5. QuantLib 金融计算——案例之普通欧式期权分析
  6. JavaSE 面试题: 类初始化和实例初始化等
  7. [转帖]java面试和笔试大全
  8. 生成Makefile文件全过程
  9. Python基础笔记(四)
  10. 八.软件自动化和web测试