P1638 逛画展 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意:

其实就是求刚好拥有所有m种数字的最短区间

思路:

尺取法

当区间内数字种数刚好为m时记录一下最小区间长度

用map的类似于滑动窗口的办法维护区间数字种数

注意多解的情况需要以L排序,L最小的优先

Code:

#include <bits/stdc++.h>
using namespace std;
const int mxn=1e6+10,mnf=0x3f3f3f3f;
struct ty{int minn,L,R;
}p[mxn];
bool cmp(ty x,ty y){return x.L<y.L;
}
vector<ty> v,ans;
unordered_map<int,int> mp;
int n,m,r=0,sum=0,mi=mnf,ansl,ansr;
int a[mxn];
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&a[i]);for(int l=1;l<=n;l++){while(r<n&&sum<m){r++;if(!mp[a[r]]) sum++;mp[a[r]]++;}if(sum>=m){if(mi>r-l+1){mi=r-l+1;ansl=l;ansr=r;v.push_back({mi,ansl,ansr});}mp[a[l]]--;if(!mp[a[l]]) sum--;}}for(int i=0;i<v.size();i++){if(v[i].minn==mi) ans.push_back(v[i]);}sort(ans.begin(),ans.end(),cmp);printf("%d %d\n",ans[0].L,ans[0].R);return 0;
}

总结:

1.map可维护区间元素种类数

2.要遍历满足某条件的区间且这个条件是单调的就可以使用尺取法

尺取法 P1638 逛画展相关推荐

  1. 洛谷 P1638 逛画展

    洛谷 P1638 逛画展 题目链接 题目描述 博览馆正在展出由世上最佳的 M 位画家所画的图画. wangjy想到博览馆去看这几位大师的作品. 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必 ...

  2. P1638 逛画展——尺取法的妙用

    题目描述 博览馆正在展出由世上最佳的 mm 位画家所画的图画. 游客在购买门票时必须说明两个数字,aa 和 bb,代表他要看展览中的第 aa 幅至第 bb 幅画(包含 a,ba,b)之间的所有图画,而 ...

  3. 洛谷 [P1638 逛画展] (尺取法)

    Link https://www.luogu.org/problemnew/show/P1638 Description  博览馆正在展出由世上最佳的 M 位画家所画的图画.wangjy想到博览馆去看 ...

  4. P1638 逛画展(尺取)

    逛画展 - 洛谷https://www.luogu.com.cn/problem/P1638 #include <iostream> #include <cstdio> #in ...

  5. 洛谷P1638 逛画展

    题目描述 博览馆正在展出由世上最佳的 m 位画家所画的图画. 游客在购买门票时必须说明两个数字,a 和 b,代表他要看展览中的第 a 幅至第 b 幅画(包含 a,b)之间的所有图画,而门票的价钱就是一 ...

  6. P1638 逛画展(直尺法)

    这道题是直尺法的模板题: #include<iostream> using namespace std; const int maxn = 1e6 + 5; const int M = 2 ...

  7. P1638 逛画展(C语言)

    题目描述 博览馆正在展出由世上最佳的 m 位画家所画的图画. 游客在购买门票时必须说明两个数字,a 和 b,代表他要看展览中的第 a 幅至第 b 幅画(包含 a,b)之间的所有图画,而门票的价钱就是一 ...

  8. 洛谷P1638 逛画展-最简单的双指针做法

    思路:定义双指针x和y代表[x,y]区间,初始化x=y=0开始遍历,刚开始时一直增加y直到包含了所有作家的画,然后就从左边x开始删区间有重复作家的画就行.注意不要把任何一个作家的画删到0!! 代码如下 ...

  9. [Luogu]P1638逛画展

    注意到满足要求的区间具有单调性,于是想到用滑动窗口. 区间具有单调性,即若[L,R]满足条件, [L,R+1]必满足条件,并且[R+1,L]有可能满足条件.如此一来不用O(n^2)枚举左右端点,这样去 ...

最新文章

  1. Java一行一行的读文件和简单的写文件
  2. flink mysql日志,关于flink的日志文件设置
  3. ILRuntime_NewbieGuide—入门
  4. asp.net中的加密方法
  5. python第三方库tkinter之Label控件和Button控件
  6. 科学网—中文普通话语音识别DEMO,LilyMandarinSpeechRecognition V1.0 - 石自强的博文...
  7. jmeter之使用代理录制脚本
  8. 区块链 xuperchain 同步模式 纯异步模式 异步阻塞模式 怎么启动
  9. CSDN程序员研修院课程无法下载
  10. 在Access数据库中使用SQL查询分析器
  11. 几种短距离无线通信技术及未来展望
  12. PTA 求链式线性表的倒数第K项 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
  13. Python提取信息测试
  14. 【python】Flask之session使用
  15. 【YOLOV5-5.x 源码解读】train.py
  16. 区块链知识系列 - BTC和ETH的区别
  17. python的flask框架
  18. python绘制剖面图_Python气象绘图教程—(十九)剖面图
  19. ant-design中取消tab激活时候的下划线、以及修改tab激活时候下划线颜色
  20. 修复VMware网络连接失败及设置固定IP

热门文章

  1. HTML5 CSS动画 animation使用
  2. 撒哈拉的故事——三毛
  3. NC与单一窗口数据对接丨外贸软件
  4. 百度地图SDK for Android【简介】
  5. H5+ app自动更新思路
  6. 权重设计:客观赋权法的说明(熵权法/变异系数法/CRCIII法/TOPSIS法)
  7. 【bzoj1001】【狼抓兔子】
  8. 哪里有免费的考研计算机课程,计算机考研课程视频哪个好
  9. React实现登录表单
  10. 软件测试 | 测试开发 | 30 分钟轻松搞定正则表达式基础