题目传送门

思路
这道题目可以通过尺取法来完成 (我才不管什么必须用队列)
什么是尺取法呢?
顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后根据实际情况不断地推进区间左右端点以得出答案。
之所以需要掌握这个技巧,是因为尺取法比直接暴力枚举区间效率高很多,尤其是数据量大的时候,所以尺取法是一种高效的枚举区间的方法,一般用于求取有一定限制的区间个数或最短的区间等等。当然任何技巧都存在其不足的地方,有些情况下尺取法不可行,无法得出正确答案!
对于这道题,我们首先可以推出一个事实:

在任意一个符合条件的区间里,答案是区间内最多的那类牛的数量。

我们只需要从左到右扫描整个队列,找到每一个只含k+1种牛的区间(删除k种+保留的一种),取每个区间内数量最多牛的数量即可。

注意点: 血统编号在0-1,000,000,000之间,需要离散化。

代码

 #include<bits/stdc++.h>
using namespace std;
map<int,int> mp;
int a[],lsh,cnt,l=,r,c[],ans=-;
int main()
{
int n,k;
cin>>n>>k;
for(int i=;i<=n;i++)
{
cin>>a[i];
if(!mp[a[i]])mp[a[i]]=++lsh;
a[i]=mp[a[i]];
}
while(r<=n)
{
r++;
if(!c[a[r]])cnt++;
c[a[r]]++;
while(cnt==k+)
{
c[a[l]]--;
if(!c[a[l]])cnt--;
l++;
}
ans=max(c[a[r]],ans);
}
cout<<ans<<endl;
return ;
}

最新文章

  1. Android笔记——Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
  2. SQL server存储过程语法及实例(转)
  3. 【工具相关】iOS-Reveal的使用
  4. Nginx 使用 sever 段规则屏蔽恶意 User Agent
  5. (转)innerHTML、innerText和outerHTML、outerText的区别
  6. python (9)统计文件夹下的所有文件夹数目、统计文件夹下所有文件数目、遍历文件夹下的文件
  7. ios 基于CAEmitterLayer的雪花,烟花,火焰,爱心等效果demo(转)
  8. AIX项目总结_oracle_sqlloader_01
  9. 嵌入式系统烧写uboot/bootloader/kernel的一般方法
  10. ext等待提示
  11. [Angular 2] Using Array ...spread to enforce Pipe immutability
  12. 芝麻HTTP:代理的基本原理
  13. SQLServer之DEFAULT约束
  14. 二叉搜索树的第k个节点
  15. UML类图中的六种关系(物理设计阶段)
  16. 【20】策略者模式(Strategy Pattern)
  17. 机器学习--Logistic回归
  18. ActiveReports 大数据分析报告:公交车司乘冲突引发的刑事案件
  19. Java的CountDownLatch和CyclicBarrier的理解和区别
  20. python3基础操作

热门文章

  1. (十三)自定义JSTL标签
  2. if语句、while和for循环
  3. spring cloud微服务实践六
  4. go 结构的方法总结
  5. 【hash】Similarity of Subtrees
  6. MySQL 子查询(三) 派生表、子查询错误
  7. 使用UTF8字符集存储中文生僻字
  8. hdu 1875 最小生成树 prime版
  9. mysql 树结构递归处理
  10. 创建多线程时,为何创建后需要Sleep?