题目:

见https://www.luogu.com.cn/problem/P1638

思路:

我以为我这么做会超时来着,没想到ac了,具体思路就是:为了满足题目要求即花最少的钱,那么我们就二分区间长度,如果在该长度下满足题意,那么就缩短长度,反之就增加长度,至于如何判断是否满足呢,可以想象一个定长的窗口从左往右滑动,每次就判断窗口内的元素种类是否等于m即可,注意二分区间取大点,不然有个样例一直过不了!!!

代码:

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N=1e6+10;
const int M=2e3+10;
int a[N],n,m,t=1e10;
typedef pair<int,int> PII;
int check(int mid,queue<PII> q,int *visit)
{int temp=0;for(int i=1;i<=n;i++){if(!visit[a[i]])temp++;visit[a[i]]++;q.push({i,a[i]});if(q.size()==mid&&temp==m){t=q.front().first;return 1;}if(q.size()==mid&&temp<m){int t1=q.front().first;int t2=q.front().second;q.pop();visit[t2]--;if(visit[t2]==0)temp--;}}return 0;
}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];int l=m-1,r=n+1;//又得加大二分区间while(l<r){int visit[M]={0};//这个visit和queue最好是开在循环里,不然很麻烦queue<PII> q;int mid=l+r>>1;if(check(mid,q,visit)) r=mid;elsel=mid+1;}cout<<t<<" "<<t+l-1<<endl;return 0;
}

逛画展(二分+队列)相关推荐

  1. acwing 651.逛画展(队列)

    acwing 651.逛画展(队列) 算法:(数组模拟队列) 思路:由题意为避免TLE易想到用队列来遍历: (牢记队列的特点:两端都为口,像一个中空的管子一样:拿它来遍历数组) 每当画家不是遇到第一次 ...

  2. 【洛谷 P1638】 【单调队列】 逛画展

    [洛谷 P1638] [单调队列] 逛画展 题目 解题思路 先求出最前面囊括所有画的位置 然后如果左边界的画不止存在一次,左边界右移 不断扩展右边界,求取答案 代码 #include<iostr ...

  3. 洛谷 P1638 逛画展

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

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

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

  5. 尺取法 P1638 逛画展

    P1638 逛画展 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 其实就是求刚好拥有所有m种数字的最短区间 思路: 尺取法 当区间内数字种数刚好为m时记录一下最小区间长度 ...

  6. P1638 逛画展(尺取)

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

  7. 逛画展(单调队列) acm寒假集训日记22/1/1

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

  8. 【队列】C002_逛画展(单调队列)

    一.Problem 博览馆正在展出由世上最佳的 M 位画家所画的图画.wangjy想到博览馆去看这几位大师的作品. 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字,a 和 b, ...

  9. Codeforces553 D. Nudist Beach(二分+队列check)

    题意: 给定n个点m条边的无向图 现在可以在n个点中选择若干个点,有k个坏点不能选择,设选出的点集为S, 对于集合S中的每个点x,定义x的活跃度为:(S中x的邻居数量)/(x的邻居数量) 现在要使得S ...

最新文章

  1. 固态器件理论(9)晶闸管
  2. 找回丢失的mysql root 用户密码
  3. Adobe Auditon使用功能(一):将音频文件切分成多段,并将每段音频分别保存到不同的文件中
  4. bat判断3306端口号是否被占用
  5. J2EE,J2SE,J2ME,JDK,SDK,JRE,JVM区别
  6. rs485中继器产品功能特点及应用领域介绍
  7. keil C对lib封装库反汇编成C语言,Keil软件“C语言”及“汇编”混编 —— 相关知识整理.doc...
  8. 一文介绍备机重建各种方法的实现机制
  9. kindeditor在线html编辑器,kindeditor在线HTML编辑器
  10. 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- Animator动画状态机...
  11. 模板类的析构函数如何写_项目经理如何正确写好年终总结+10大PPT模板可直接套用...
  12. 三维点云学习(4)7-ransac 地面分割+ DBSCAN聚类比较
  13. 求数组中最小的k个数
  14. 中文 tts 开源 Android,7 个开源的TTS(文本转语音)系统推荐-Go语言中文社区
  15. 建立技术博客对于自己的意义
  16. word表格删除空白行java_在Word中怎样批量删除空行,这些点主要注意
  17. English--不定式
  18. Latex表格/公式在线编译转换器
  19. STM32F103通过M26实现远程在线IAP
  20. Unity 四种截图方法(相机视图、无UI、有UI、Game窗口)

热门文章

  1. ios开发实战swift开发macQQ教程
  2. 荣欣Linux运维+Oracle DBA实战训练
  3. 2017京东校招面试回忆 已成功拿到offer
  4. 【2023秋招】9月京东校招题目
  5. 《Adobe Illustrator CS5中文版经典教程》—第1课1.5节使用“导航器”面板
  6. #19ACM第一次招新补题赛de题解呐#
  7. 使用malloc为指针分配内存空间
  8. java实现简单控制台出租房屋管理系统
  9. 统计正数和负数的个数然后计算这些数的平均值_人人都是数据分析师之统计分析...
  10. linux 点亮屏幕,按电源键屏幕唤醒和屏幕睡眠流程(从上层到kernel)