题目如下:

AC代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<list>
#define inf 99999999
/*其实O(n)就能做。
对于一个数,我们维护它最后出现的位置p [ ] 。那么对于L~R(假设已经达到m种画都有),
R+1时,至少一个数的p会被更新。那么如果这个左端点在这个区间中还有一个,即 L < p [ a [ L ] ] ,
那么这个L删掉是没有影响的,我们就让L++;否则L不变,这样保证这个队伍里必定1~m都有,更新答案即可。*/
using namespace std;
const int MAX = 1e6+9;
int p[MAX];
int a[MAX];
int L = 0,R = inf;
int main()
{int n,k;scanf("%d %d",&n,&k);for(int i = 1;i<=n;i++){scanf("%d",&a[i]);}int l = 1;int cnt = 0;for(int i = 1;i<=n;i++){if(!p[a[i]])cnt++;p[a[i]] = i;while(l<p[a[l]])l++;if(cnt==k&&R-L+1>i-l+1){L = l;R = i;}}cout<<L<<' '<<R;
}

代码解析:

典型单调队列(模板题)

最优:

1:1~m都出现过。

2:长度最短。

开一个计算器cnt来记录1~m出现了几个

if(!p[a[i]])
cnt++;

每次进队列我们就可以更新r (r = i)

那我们如何更新l呢?

while(l<p[a[l]])
l++;

当满足这个条件时,相当于 当前进队列的 不会对 原状态产生影响,那l++。

举个例子:【1 2 3 4】1 下一个状态——》1【2 3 4 1】

当cnt == m时,已满足最优条件1,我们比较上一次的长度(初始长度定义为 无穷大)得到最小长度,反复比较最终满足最优条件2——》得到答案!

最后发个牢骚:动态规划(单调栈 /队列)有点难(www),今天研究了一天,感觉还是不太行 www

所以我要继续努力,披荆斩棘,再硬也把他吃透(哈哈哈!!!)

最后的最后:祝大家 元旦快乐!!!

逛画展(单调队列) acm寒假集训日记22/1/1相关推荐

  1. spfa(STL写法)简单讲解+最短路(spfa)例题 acm寒假集训日记22/1/7

    前言:SPFA(Shortest Path Faster Algorithm)算法是求单源最短路线的一种算法,它是Bellman-ford的队列优化,它是一种十分高效的最短路算法. spfa 其实可以 ...

  2. 最少换乘(最短路+恶心的输入)acm寒假集训日记22/1/3 or 22/1/4

    题目如下: AC代码如下: #include<iostream> #include<cstring> #include<cstdio> using namespac ...

  3. 矩阵问题入门(矩阵乘法and矩阵快速幂)acm寒假集训日记22/1/15

    今天凌晨3点才睡,没想到通过看小说抑制玩游戏,反而看小说的时间更长. u1s1:那小说太刺激了,晚上看很有感觉,风吹草动我就会猛地看过去(类似茄子说柜子动了,哈哈),真TM(语气词)练胆量!!!..Q ...

  4. 扩展欧几里得exgcd算法 acm寒假集训日记22/1/12

    数学证明 ax + by = gcd(a,b) 令gcd(a,b) = d 得:ax + by = d ① 因为:gcd(a,b) = gcd(b,a%b) 所以:bx + a%b * y = d b ...

  5. 【初学线段树,看这篇文章准没错】线段树(单点修改and区间修改)acm寒假集训日记22/1/10

    线段树 线段树是算法竞赛中常用的用来维护区间信息的数据结构.是一名ACMer 需要掌握的一种基础.重要的数据结构线段树可以在O(logN)的时间复杂度内实现单点修改,区间修改,区间查询(区间求和,区间 ...

  6. 最小生成树(Kruskal算法+Prim算法)简单讲解+最小生成树例题 acm寒假集训日记22/1/8

    算法简讲部分: Kruskal算法: 基于贪心策略大致过程分为第三步:1. 我们先用结构体把每条边的端点和权值记录下来,然后对每条边按权值进行排序2. 因为 使图连通最少需要n-1 条边,所以我们依次 ...

  7. G - A Bug‘s Life(并查集) acm寒假集训日记22/1/2

    题目如下: 提示:输入很大,你忍一下,小心超时 AC代码如下: #include<iostream> #include<algorithm> #include<cstri ...

  8. KMP算法(字符串匹配问题)acm寒假集训日记22/1/19

    首先,先看一道例题: 如果不考虑超时的话,我们完全可以用最朴素的方法(暴力)去求 //暴力算法(n*m) int ViolentMatch(char *s,char *p) {int sLen = s ...

  9. CodeForces - 1485B(找规律+求和) acm寒假集训日记21/12/31or22/1/1

    题目如下: AC代码如下: #include<iostream> #include<algorithm> #include<cstring> #include< ...

最新文章

  1. HTML5调用手机的Datepicker(日期选择器)
  2. 1045 Favorite Color Stripe(LIS解法)
  3. R语言导入SPSS文件实战
  4. 20172327 2018-2019-1 《程序设计与数据结构》第八周学习总结
  5. android studio android 测试
  6. python命令行输入函数回退_Python2 中 input() 和 raw_input() 的区别
  7. cvBoundingRect的用法(转)
  8. 「Django」contenttypes基本用法
  9. 多元升级重塑移动体验 三星Galaxy发布多款新品
  10. RK3399 修改android桌面图标默认大小
  11. 学习笔记(02):Java小白修炼手册-工欲善其事必先利其器,掌握Java开发工具
  12. SVAC编解码技术标准:诞生、质疑与发展
  13. html5/css实现字体上划线
  14. java8之localDateTime, ZoneId, Instant使用
  15. CFileDialog使用总结
  16. 《江南百景图》为什么火了?和主创团队聊完之后,我跪了
  17. 2023 华为 Datacom-HCIE 真题题库 06/12--含解析
  18. 如何成为一名合格的数据科学家(IT专家网)
  19. 电子英汉词典c语言设计报告,C语言课程设计——电子英汉词典汇编.doc
  20. maven打瘦包,且只打入部分想打入的依赖瘦包

热门文章

  1. Spring Framework源码编译,开始Spring源码学习
  2. 【踩坑记录】mybatis-plus的insert方法,默认会生成一个uuid作为主键,导致类型不一致,存入数据库报错
  3. js 通用 1000 金额 三位格式化 1,000
  4. C#LeetCode刷题之#551-学生出勤纪录 I​​​​​​​(Student Attendance Record I)
  5. html css js速成_CSS速成课程
  6. 如何通过统计值z看置信水平_中恨他! 看看他如何通过这一简单技巧来改善统计信息页面...
  7. arkit unity_凯蒂猫! 如何使用ARKit和Unity制作增强现实应用程序。
  8. 学生_课程_成绩_教师50个常用sql
  9. Python 一键转化代码为流程图
  10. Python3 协程 + 正则 批量爬取斗鱼美女图片