逛画展(单调队列) acm寒假集训日记22/1/1
题目如下:
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相关推荐
- spfa(STL写法)简单讲解+最短路(spfa)例题 acm寒假集训日记22/1/7
前言:SPFA(Shortest Path Faster Algorithm)算法是求单源最短路线的一种算法,它是Bellman-ford的队列优化,它是一种十分高效的最短路算法. spfa 其实可以 ...
- 最少换乘(最短路+恶心的输入)acm寒假集训日记22/1/3 or 22/1/4
题目如下: AC代码如下: #include<iostream> #include<cstring> #include<cstdio> using namespac ...
- 矩阵问题入门(矩阵乘法and矩阵快速幂)acm寒假集训日记22/1/15
今天凌晨3点才睡,没想到通过看小说抑制玩游戏,反而看小说的时间更长. u1s1:那小说太刺激了,晚上看很有感觉,风吹草动我就会猛地看过去(类似茄子说柜子动了,哈哈),真TM(语气词)练胆量!!!..Q ...
- 扩展欧几里得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 ...
- 【初学线段树,看这篇文章准没错】线段树(单点修改and区间修改)acm寒假集训日记22/1/10
线段树 线段树是算法竞赛中常用的用来维护区间信息的数据结构.是一名ACMer 需要掌握的一种基础.重要的数据结构线段树可以在O(logN)的时间复杂度内实现单点修改,区间修改,区间查询(区间求和,区间 ...
- 最小生成树(Kruskal算法+Prim算法)简单讲解+最小生成树例题 acm寒假集训日记22/1/8
算法简讲部分: Kruskal算法: 基于贪心策略大致过程分为第三步:1. 我们先用结构体把每条边的端点和权值记录下来,然后对每条边按权值进行排序2. 因为 使图连通最少需要n-1 条边,所以我们依次 ...
- G - A Bug‘s Life(并查集) acm寒假集训日记22/1/2
题目如下: 提示:输入很大,你忍一下,小心超时 AC代码如下: #include<iostream> #include<algorithm> #include<cstri ...
- KMP算法(字符串匹配问题)acm寒假集训日记22/1/19
首先,先看一道例题: 如果不考虑超时的话,我们完全可以用最朴素的方法(暴力)去求 //暴力算法(n*m) int ViolentMatch(char *s,char *p) {int sLen = s ...
- CodeForces - 1485B(找规律+求和) acm寒假集训日记21/12/31or22/1/1
题目如下: AC代码如下: #include<iostream> #include<algorithm> #include<cstring> #include< ...
最新文章
- HTML5调用手机的Datepicker(日期选择器)
- 1045 Favorite Color Stripe(LIS解法)
- R语言导入SPSS文件实战
- 20172327 2018-2019-1 《程序设计与数据结构》第八周学习总结
- android studio android 测试
- python命令行输入函数回退_Python2 中 input() 和 raw_input() 的区别
- cvBoundingRect的用法(转)
- 「Django」contenttypes基本用法
- 多元升级重塑移动体验 三星Galaxy发布多款新品
- RK3399 修改android桌面图标默认大小
- 学习笔记(02):Java小白修炼手册-工欲善其事必先利其器,掌握Java开发工具
- SVAC编解码技术标准:诞生、质疑与发展
- html5/css实现字体上划线
- java8之localDateTime, ZoneId, Instant使用
- CFileDialog使用总结
- 《江南百景图》为什么火了?和主创团队聊完之后,我跪了
- 2023 华为 Datacom-HCIE 真题题库 06/12--含解析
- 如何成为一名合格的数据科学家(IT专家网)
- 电子英汉词典c语言设计报告,C语言课程设计——电子英汉词典汇编.doc
- maven打瘦包,且只打入部分想打入的依赖瘦包
热门文章
- Spring Framework源码编译,开始Spring源码学习
- 【踩坑记录】mybatis-plus的insert方法,默认会生成一个uuid作为主键,导致类型不一致,存入数据库报错
- js 通用 1000 金额 三位格式化 1,000
- C#LeetCode刷题之#551-学生出勤纪录 I​​​​​​​(Student Attendance Record I)
- html css js速成_CSS速成课程
- 如何通过统计值z看置信水平_中恨他! 看看他如何通过这一简单技巧来改善统计信息页面...
- arkit unity_凯蒂猫! 如何使用ARKit和Unity制作增强现实应用程序。
- 学生_课程_成绩_教师50个常用sql
- Python 一键转化代码为流程图
- Python3 协程 + 正则 批量爬取斗鱼美女图片