一开始一脸懵逼。。

  后来才想到维护一左一右俩指针l和r..表示[l,r]这段内不同种类的数字<=k+1种。

  显然最左的、合法的l随着r的增加而不减。

  顺便离散化,记一下各个种类数字出现的次数就可以算出答案了。

  时间复杂度O(n)

 #include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e5+;
struct zs{int v,id;}a[maxn];
int mp[maxn],sm[maxn];
int i,j,n,m,ans,num,K; int ra;char rx;
inline int read(){
rx=getchar(),ra=;
while((rx<''||rx>''))rx=getchar();
while(rx>=''&&rx<='')ra*=,ra+=rx-,rx=getchar();return ra;
}
bool cmp(zs a,zs b){return a.v<b.v;}
inline void add(int x){num+=!sm[x]++;}
inline void del(int x){num-=!--sm[x];}
int main(){
n=read(),K=read();
for(i=;i<=n;i++)a[i].v=read(),a[i].id=i;
sort(a+,a++n,cmp);int cnt=;
for(i=;i<=n;mp[a[i].id]=cnt,i++)
if(a[i].v!=a[i-].v||i==)cnt++;
int l=,r=;sm[mp[]]++,num=ans=;
for(r=;r<=n;r++){
add(mp[r]);
while(num>K+)del(mp[l]),l++;
ans=max(ans,sm[mp[r]]);
// printf("%d--%d\n",l,r);
}
printf("%d\n",ans);
}

最新文章

  1. mysql 根据查询结果集更新
  2. 在Windows宿主机中连接虚拟机中的Docker容器
  3. 2015弱校联盟(1) -J. Right turn
  4. iOS修改手机定位(非越狱任意位置)
  5. java获取class所在jar
  6. POJ 1568 Find the Winning Move(极大极小搜索)
  7. 通过GitHub和Hexo搭建个人博客
  8. Front-End Engineer 技术栈
  9. Lodop提示BarCode Type(ena13)Invalid!
  10. mybatis + oracle insert clob,出现ORA-01461:仅能绑定要插入LONG列的LONG值
  11. vmware平台下两次网络不通的诡异事件
  12. 使用JQuery进行DOM操作
  13. 基于SIFT特征的全景图像拼接
  14. Linux 文本处理命令
  15. js权威指南---学习笔记01
  16. 浅析Linux线程调度
  17. [Functional Programming 101] runWIth, evalWith, execWith
  18. 基于Extjs的web表单设计器
  19. iOS开发 常见错误
  20. iOS开源项目:FlatUIKit

热门文章

  1. sourceTree每次拉取代码和提交代码都需要输入密码
  2. 利用aop插入异常日志的2种方式
  3. nginx编译参数的内容
  4. ElasticSearch 学习记录之如任何设计可扩容的索引结构
  5. c#全宇宙最牛的编程软件
  6. axios配合vue+webpack使用
  7. Xamarin.Android 使用Timer 并更改UI
  8. asp.net core webapi 服务端配置跨域
  9. Oracle中session和processes的设置
  10. TPYBoard v102的GPIO使用用法