逛画展(二分+队列)
题目:
见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;
}
逛画展(二分+队列)相关推荐
- acwing 651.逛画展(队列)
acwing 651.逛画展(队列) 算法:(数组模拟队列) 思路:由题意为避免TLE易想到用队列来遍历: (牢记队列的特点:两端都为口,像一个中空的管子一样:拿它来遍历数组) 每当画家不是遇到第一次 ...
- 【洛谷 P1638】 【单调队列】 逛画展
[洛谷 P1638] [单调队列] 逛画展 题目 解题思路 先求出最前面囊括所有画的位置 然后如果左边界的画不止存在一次,左边界右移 不断扩展右边界,求取答案 代码 #include<iostr ...
- 洛谷 P1638 逛画展
洛谷 P1638 逛画展 题目链接 题目描述 博览馆正在展出由世上最佳的 M 位画家所画的图画. wangjy想到博览馆去看这几位大师的作品. 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必 ...
- P1638 逛画展——尺取法的妙用
题目描述 博览馆正在展出由世上最佳的 mm 位画家所画的图画. 游客在购买门票时必须说明两个数字,aa 和 bb,代表他要看展览中的第 aa 幅至第 bb 幅画(包含 a,ba,b)之间的所有图画,而 ...
- 尺取法 P1638 逛画展
P1638 逛画展 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 其实就是求刚好拥有所有m种数字的最短区间 思路: 尺取法 当区间内数字种数刚好为m时记录一下最小区间长度 ...
- P1638 逛画展(尺取)
逛画展 - 洛谷https://www.luogu.com.cn/problem/P1638 #include <iostream> #include <cstdio> #in ...
- 逛画展(单调队列) acm寒假集训日记22/1/1
题目如下: AC代码如下: #include<iostream> #include<cstdio> #include<algorithm> #include< ...
- 【队列】C002_逛画展(单调队列)
一.Problem 博览馆正在展出由世上最佳的 M 位画家所画的图画.wangjy想到博览馆去看这几位大师的作品. 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字,a 和 b, ...
- Codeforces553 D. Nudist Beach(二分+队列check)
题意: 给定n个点m条边的无向图 现在可以在n个点中选择若干个点,有k个坏点不能选择,设选出的点集为S, 对于集合S中的每个点x,定义x的活跃度为:(S中x的邻居数量)/(x的邻居数量) 现在要使得S ...
最新文章
- 固态器件理论(9)晶闸管
- 找回丢失的mysql root 用户密码
- Adobe Auditon使用功能(一):将音频文件切分成多段,并将每段音频分别保存到不同的文件中
- bat判断3306端口号是否被占用
- J2EE,J2SE,J2ME,JDK,SDK,JRE,JVM区别
- rs485中继器产品功能特点及应用领域介绍
- keil C对lib封装库反汇编成C语言,Keil软件“C语言”及“汇编”混编 —— 相关知识整理.doc...
- 一文介绍备机重建各种方法的实现机制
- kindeditor在线html编辑器,kindeditor在线HTML编辑器
- 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- Animator动画状态机...
- 模板类的析构函数如何写_项目经理如何正确写好年终总结+10大PPT模板可直接套用...
- 三维点云学习(4)7-ransac 地面分割+ DBSCAN聚类比较
- 求数组中最小的k个数
- 中文 tts 开源 Android,7 个开源的TTS(文本转语音)系统推荐-Go语言中文社区
- 建立技术博客对于自己的意义
- word表格删除空白行java_在Word中怎样批量删除空行,这些点主要注意
- English--不定式
- Latex表格/公式在线编译转换器
- STM32F103通过M26实现远程在线IAP
- Unity 四种截图方法(相机视图、无UI、有UI、Game窗口)
热门文章
- ios开发实战swift开发macQQ教程
- 荣欣Linux运维+Oracle DBA实战训练
- 2017京东校招面试回忆 已成功拿到offer
- 【2023秋招】9月京东校招题目
- 《Adobe Illustrator CS5中文版经典教程》—第1课1.5节使用“导航器”面板
- #19ACM第一次招新补题赛de题解呐#
- 使用malloc为指针分配内存空间
- java实现简单控制台出租房屋管理系统
- 统计正数和负数的个数然后计算这些数的平均值_人人都是数据分析师之统计分析...
- linux 点亮屏幕,按电源键屏幕唤醒和屏幕睡眠流程(从上层到kernel)