BZOJ 1293: [SCOI2009]生日礼物【单调队列】
1293: [SCOI2009]生日礼物
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 2534 Solved: 1383
[Submit][Status][Discuss]
Description
小布生日快到了,于是小西打算剪一段彩带送给小布。为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠。同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的长度即为彩带开始位置到结束位置的位置差。
Input
Output
Sample Input
1 5
2 1 7
3 1 3 8
Sample Output
HINT
有多种方案可选,其中比较短的是1~5和5~8。后者长度为3最短。
【数据规模】
对于50%的数据, N≤10000;
对于80%的数据, N≤800000;
对于100%的数据,1≤N≤1000000,1≤K≤60,0≤彩珠位置<2^31。
Source
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1293
分析:枚举起点找出每一种颜色在这个位置之后的第一个位置与这个位置距离的最大值,再找出每一个起点结果的最小值
首先我们把所有元素排一下序,然后枚举最小值,那么最大值是非严格单调上升的,就是一个珠子换成其后第一个的同颜色珠子时,将更新一下最大值,而最小珠子则刚好是其后第一个:
附图一张:【样例说明】
由图可知,选择3
下面给出AC代码:
#include <bits/stdc++.h>
using namespace std;
inline int read()
{
int x=,f=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-')
f=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x*f;
}
#define inf 0x7f7f7f7f
int head[];
const int N=;
int next[N],v[N],a[N];
int n,k,ans=inf;
int cnt;
inline bool cal(int x)
{
int maxn=;
for(int i=;i<=k;i++)
{
while(v[head[i]]>x)
{
if(!next[head[i]])
return false;
head[i]=next[head[i]];
}
if(v[head[i]]<=x)
maxn=max(maxn,x-v[head[i]]);//枚举起点找出每一种颜色在这个位置之后的第一个位置与这个位置距离的最大值
}
ans=min(ans,maxn);//找出每一个起点结果的最小值
return true;
}
int main()
{
n=read();
k=read();
for(int i=;i<=k;i++)
{
int x=read();
for(int j=;j<=x;j++)
{
int y=read();
v[++cnt]=y;
next[cnt]=head[i];
head[i]=cnt;
a[cnt]=y;
}
}
sort(a+,a++cnt);
for(int i=cnt;i>;i--)
{
if(a[i]!=a[i+])
{
if(!cal(a[i]))
break;
}
}
printf("%d\n",ans);
return ;
}
BZOJ 1293: [SCOI2009]生日礼物【单调队列】的更多相关文章
- [bzoj 1293] [SCOI2009] 生日礼物
传送门(bzoj) 传送门(luogu) 题目: Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应 ...
- BZOJ 1293 SCOI2009 生日礼物 堆
题目大意:给定一个数轴上n个点,每一个点有一种颜色,一共k种颜色.求一个最短的区间,包括全部k种颜色 卡了一段时间0.0 一開始想二分答案啥的 后来发现数据范围太大写不了0.0 后来去找题解才发现尼玛 ...
- bzoj 1293: [SCOI2009]生日礼物 问题转化 + 性质分析 + 滚动数组优化
Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩 ...
- 1293: [SCOI2009]生日礼物
1293: [SCOI2009]生日礼物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1096 Solved: 584[Submit][Statu ...
- BZOJ 1047 二维单调队列
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 题意:见中文题面 思路:该题是求二维的子矩阵的最大值与最小值的差值尽量小.所以可以考 ...
- UESTC 880 生日礼物 --单调队列优化DP
定义dp[i][j]表示第i天手中有j股股票时,获得的最多钱数. 转移方程有: 1.当天不买也不卖: dp[i][j]=dp[i-1][j]; 2.当天买了j-k股: dp[i][j]=max(dp[ ...
- BZOJ 1855 股票交易(单调队列优化DP)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1855 题意:最近lxhgww又迷上了投资股票, 通过一段时间的观察和学习,他总结出了股票 ...
- BZOJ 2424 订货(贪心+单调队列)
怎么题解都是用费用流做的啊...用单调队列多优美啊. 题意:某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初 ...
- BZOJ 1012 线段树||单调队列
非常裸的线段树 || 单调队列: 假设一个节点在队列中既没有时间优势(早点入队)也没有值优势(值更大),那么显然不管在如何的情况下都不会被选为最大值. 既然它仅仅在末尾选.那么自然能够满足以上的条件 ...
随机推荐
- Python 项目实践二(生成数据)第二篇之随机漫步
接着上节继续学习,在本节中,我们将使用Python来生成随机漫步数据,再使用matplotlib以引人瞩目的方式将这些数据呈现出来.随机漫步是这样行走得到的路径:每次行走都完全是随机的,没有明确的方向 ...
- iOS 如何优化 App 的启动时间
App 运行理论 main() 执行前发生的事 Mach-O 格式 虚拟内存基础 Mach-O 二进制的加载 理论速成 Mach-O 术语 Mach-O 是针对不同运行时可执行文件的文件类型. 文件类 ...
- 安装MongoDB步骤
1.第一步是从官网下载匹配自己操作系统的安装文件或压缩文件: 2.随便找个文件夹先解压安装文件,然后在C盘根目录建立一个新文件夹命名为mongodb: 3.将打开刚刚安装的文件,将bin文件夹拷贝到C ...
- 解决NTPD漏洞,升级Ntpd版本
关于解决漏洞的问题我就不详说了,主要就是升级版本.这里我们就直接简单记录下步骤: 1.升级 使用root用户登录系统进入到/home/guankong ,上传ntp-4.2.8p9-1.el6.x86 ...
- shell脚本-批量执行机器命令
场景:通过跳板机,批量获取线上机器日志 使用方式:run2 host 'ls -al /home/admin/' #! /bin/sh USER_NAME=$USER if [ $# -ne 2 ]; ...
- CentOS下 elasticsearch集群安装
1.进入root目录并下载elasticsearch cd /root wget https://download.elastic.co/elasticsearch/elasticsearch/ela ...
- C语言中static关键字的用法
C记得还是大一时学的,现在觉得好久没用了,又捧起来看看.今天刚看到有关static关键字,仔细地看了一遍<C和指针>这本书中的解释,现在觉得清楚多了. 首先,我们将static关键字,修饰 ...
- 关于HTTP协议头域详解
HTTP1.1 请求头:消息头 Accept:text/html,image/* 告诉服务器,客户机支持的数据类型 Accept-Charset:ISO-8859-1 告诉服务器,客户机采用的编 ...
- windows c++ 程序移植到Linux的一些要点
这段时间得到一份源码,是Windows下的,调试了一把,可以正常运行,可是没有Linux版本,而实际的应用场景是要在Linux服务器上面运行 所以涉及到Windows下c++程序的移植,有同事竭力推荐 ...
- Struts2内部执行过程
首先是Struts2的流程图. 一.当有一个请求的时候.执行以下流程. 1 客户端初始化一个指向Servlet容器的请求: 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做Act ...