刷题总结——生日礼物(bzoj1293单调队列)
题目:
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。
题解:
先开始读错题了卡了半天23333
一道单调队列的简单题···注意边界条件就行···先将珠子按照位置排序,维护一个单调队列就好了,过程类似于莫队时的维护答案····注意下边界条件就好了
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int N=1e6+;
const int M=;
struct node
{
int p,c;
}b[N];
int n,m,k,queue[N],head,tail,tot,cnt[M],now,ans=0x7f7f7f7f;
inline int R()
{
char c;int f=;
for(c=getchar();c<''||c>'';c=getchar());
for(;c<=''&&c>='';c=getchar())
f=(f<<)+(f<<)+c-'';
return f;
}
inline bool cmp(node a,node b)
{
return a.p<b.p;
}
int main()
{
freopen("a.in","r",stdin);
n=R(),m=R();
for(int i=;i<=m;i++)
{
k=R();
for(int j=;j<=k;j++)
b[++tot].p=R(),b[tot].c=i;
}
sort(b+,b+tot+,cmp);
head=tail=;cnt[b[].c]++,now=;
for(;head<=tot;head++)
{
while(now<m&&tail<=tot)
{
tail++;
if(!cnt[b[tail].c]) now++;
cnt[b[tail].c]++;
}
if(tail==tot+) break;
if(now==m) ans=min(ans,b[tail].p-b[head].p);
cnt[b[head].c]--;
if(!cnt[b[head].c]) now--;
}
cout<<ans<<endl;
return ;
}
刷题总结——生日礼物(bzoj1293单调队列)的更多相关文章
- 刷题向》POJ2823 单调队列裸题(<不会做,请自裁>系列)
最近BZOJ炸了,而我的博客上又更新了一些基本知识,所以这里刷一些裸题,用以丰富知识性博客 POJ2823 滑动的窗口 这是一道经典的单调队题,我记得我刚学的时候就是用这道题作为单调队列的例题,算 ...
- 【BZOJ1293】[SCOI2009]生日礼物(单调队列)
[BZOJ1293][SCOI2009]生日礼物(单调队列) 题面 BZOJ 洛谷 题解 离散之后随便拿单调队列维护一下就好了. #include<iostream> #include&l ...
- [bzoj1293][SCOI2009]生日礼物(单调队列)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1293 分析: 问题的关键就是选择每种颜色的哪一个好.可以先把每种颜色的第一个一起,更新 ...
- BZOJ 1293: [SCOI2009]生日礼物【单调队列】
1293: [SCOI2009]生日礼物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2534 Solved: 1383[Submit][Stat ...
- 洛谷P2564 生日礼物【单调队列】
题目背景 四川2009NOI省选 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可 ...
- 【P2564】生日礼物(单调队列)
这个题看上去状态比较多,实际上由于题目的输出需要,又因为是一个线性的结构,所以我们可以有一些操作. 这么想,如果我们有了一个满足条件的区间,此时我们缩减左端点,然后判断此时是否还是满足,满足就继续缩减 ...
- C#LeetCode刷题之#622-设计循环队列(Design Circular Queue)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4126 访问. 设计你的循环队列实现. 循环队列是一种线性数据结构 ...
- C#LeetCode刷题之#232-用栈实现队列(Implement Queue using Stacks)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4108 访问. 使用栈实现队列的下列操作: push(x) -- ...
- 洛谷P2564 [SCOI2009]生日礼物(单调队列)
传送门 准确的来说这个应该叫尺取法? 先对所有的点按$x$坐标进行排序 我们维护两个指针$l,r$,每一次令$r$不断右移直到所有颜色齐全,再不断右移$l$直到颜色数不足,那么此时$[l-1,r]$这 ...
随机推荐
- Netbackup常用命令--bpdbjobs
1.大纲 bpdbjobs – 与 NetBackup 作业数据库进行交互 bpdbjobs [-report] [-M master_servers] [-ignore_parent_jobs] [ ...
- HTML5中的SSE(服务器推送技术)
本文原链接:https://cloud.tencent.com/developer/article/1194063 SSE技术详解:一种全新的HTML5服务器推送事件技术 前言 概述 基本介绍 与We ...
- java基础—多态(动态加载)
一.面向对象最核心的机制——动态绑定,也叫多态
- Spring多种方式实现依赖注入
平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖类不由 ...
- 简单的cocos2dx笔试题
1.参数传递有几种方式?值传递.指针传递.引用传递 2.指针和引用有什么分别:如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗? 1.指针是一个变量,存储一个地址,指向内存的一个存储单元: ...
- C/C++基础知识:函数指针和指针函数的基本概念
[函数指针] 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址.可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指 ...
- 【python】python安装和运行报错汇总
本文主要用于汇总在python开发过程中遇到的各种环境.工具相关问题,便于后续遇到相关问题,及时搞定,持续更新. 一.安装pip失败,具体如下: 错误信息: python setup.py insta ...
- linux文件属性文文件类型知识
文件类型分别介绍: 1.普通文件:我们通过用ls -l来查看xxx.sql的属性,可以看到第一列内容为-rw-r--r--,值得注意的是第一个符号是-(英文字符减号),在Linux中,以这样的字符开 ...
- mysql替换表中某字段的某值
UPDATE `cases` SET `case_desc` = replace(`case_desc`, 'src="//tuku-assets.m.jia.com/assets/i ...
- memcache 协议 && Golang实现
https://github.com/quguolin/memcache 一:Error ERROR\r\n 客户端发送了一个不存在的命令 CLIENT_ERROR\r\n 客户端发送了一个不符合协议 ...