NC20565 [SCOI2009]生日礼物

题目

题目描述

小西有一条很长的彩带,彩带上挂着各式各样的彩珠。已知彩珠有 \(N\) 个,分为 \(K\) 种。简单的说,可以将彩带考虑为 \(x\) 轴,每一个彩珠有一个对应的坐标(即位置)。某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上。 小布生日快到了,于是小西打算剪一段彩带送给小布。为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠。同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的长度即为彩带开始位置到结束位置的位置差。

输入描述

第一行包含两个整数 \(N, K\),分别表示彩珠的总数以及种类数。

接下来 \(K\) 行,每行第一个数为 \(T_i\) ,表示第 \(i\) 种彩珠的数目。接下来按升序给出 \(T_i\) 个非负整数,为这 \(T_i\) 个彩珠分别出现的位置。

输出描述

应包含一行,为最短彩带长度。

示例1

输入

6 3
1 5
2 1 7
3 1 3 8

输出

3

备注

对于 \(50\%\) 的数据, \(N\leq 10000\);

对于 \(80\%\) 的数据, \(N\leq 800000\);

对于 \(100\%\)的数据,\(1\leq N\leq 1000000\),\(1\leq K\leq 60\),\(0\leq 珠子位置\leq 2^{31}\)。\(\sum T_i =n\)

题解

思路

知识点:离散化+尺取法。

由于位置超数组模拟的限度,因此离散化每个位置和对应的彩灯类型,节约大部分无效空间。

按位置从小到大排序,注意到对于某一段恰好合法彩带,左端点向右移,右端点不需要复位,因为右端点是以右端点之前所有端点为左端点的合法最小右端点,符合尺取法。

时间复杂度 \(O(n\log n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>

using namespace std;

pair<int,int> bead[1000007];///离散化每个位置和对应的彩灯类型 60*10^6
int vis[67];///记录尺取区间的种类访问数 int main(){
std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n,k;
cin>>n>>k;
int cnt = 0;
for(int i = 0;i<k;i++){
int t;
cin>>t;
for(int j = 0;j<t;j++){
int pos;
cin>>pos;
bead[cnt++] = make_pair(pos,i);
}
}
sort(bead,bead+cnt);///按位置从小到大排序 int l = 0,r = 0,sum = 0,len = ~(1<<31);
while(l<n){
while(r<n && sum<k){
if(!vis[bead[r].second]) sum++;
vis[bead[r].second]++;
r++;
}///注意r在合法区间的右侧+1位置,因为每次都是最后++,合法之后会再++
if(sum>= k) len = min(len,bead[r-1].first - bead[l].first);///注意距离而不是点个数,是两个位置的差不需要加1
vis[bead[l].second]--;
if(!vis[bead[l].second]) sum--;
l++;
}
cout<<len<<'\n';
return 0;
}

NC20565 [SCOI2009]生日礼物的更多相关文章

  1. 1293: [SCOI2009]生日礼物

    1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1096  Solved: 584[Submit][Statu ...

  2. BZOJ 1293: [SCOI2009]生日礼物【单调队列】

    1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2534  Solved: 1383[Submit][Stat ...

  3. bzoj1293[SCOI2009]生日礼物 尺取法

    1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2838  Solved: 1547[Submit][Stat ...

  4. P2564 [SCOI2009]生日礼物(尺取法)

    P2564 [SCOI2009]生日礼物 三个字.尺取法......... 坐标按x轴排序. 蓝后尺取一下.......... #include<iostream> #include< ...

  5. 【BZOJ1293】[SCOI2009]生日礼物(单调队列)

    [BZOJ1293][SCOI2009]生日礼物(单调队列) 题面 BZOJ 洛谷 题解 离散之后随便拿单调队列维护一下就好了. #include<iostream> #include&l ...

  6. bzoj1293: [SCOI2009]生日礼物(stl堆)

    1293: [SCOI2009]生日礼物 题目:传送门 题解: 据说这道题乱搞随便就水过了 本蒟蒻想到了一个用堆的水法(还专门学了学queue): 如果把每一种颜色的下一个位置都记录一下的话,一开始就 ...

  7. 1293: [SCOI2009]生日礼物 - BZOJ

    Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩 ...

  8. bzoj1293: [SCOI2009]生日礼物

    单调队列 用一个堆维护目前每个颜色在里面的点,每回取出队首点,并更新答案.一旦哪个颜色的点都被用完,跳出循环. #include<cstdio> #include<algorithm ...

  9. [bzoj 1293] [SCOI2009] 生日礼物

    传送门(bzoj) 传送门(luogu) 题目: Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应 ...

随机推荐

  1. Java语言学习day17--7月23日

    1.面向对象思想2.类与对象的关系3.局部变量和成员变量的关系4.封装思想5.private,this关键字6.随机点名器 ###01面向对象和面向过程的思想 * A: 面向过程与面向对象都是我们编程 ...

  2. 『现学现忘』Git基础 — 8、Git创建本地版本库

    目录 1.Git版本库介绍 2.创建本地版本库 场景一:创建一个空的本地版本库. 场景二:项目中已存在文件时,创建该项目的本地版本库. 场景三:在GitHub网站上创建仓库,克隆到本地. 1.Git版 ...

  3. spring-data-jpa操作数据库

    1.spring-data-jpa是spring对hibernate的整合 2.spring boot工程在实体类添加注解.添加两个依赖.写配置文件,可以自动生成数据库表 实体类: @Entity / ...

  4. 论文解读(IGSD)《Iterative Graph Self-Distillation》

    论文信息 论文标题:Iterative Graph Self-Distillation论文作者:Hanlin Zhang, Shuai Lin, Weiyang Liu, Pan Zhou, Jian ...

  5. 1.10 Linux桌面环境(桌面系统)大比拼[附带优缺点

    早期的 Linux 系统都是不带界面的,只能通过命令来管理,比如运行程序.编辑文档.删除文件等.所以,要想熟练使用 Linux,就必须记忆很多命令. 后来随着 Windows 的普及,计算机界面变得越 ...

  6. Linux 系统安装 AutoFs 挂载服务

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 作者: Escape 链接: https://escapelife.github.io/pos ...

  7. 老生常谈系列之Aop--AspectJ

    老生常谈系列之Aop--AspectJ 这篇文章的目的是大概讲解AspectJ是什么,所以这个文章会花比较长的篇幅去解释一些概念(这对于日常开发来说没一点卵用,但我就是想写),本文主要参考Aspect ...

  8. 解决mysq服务无法正常启动问题

    在mysql的启动过程中,遇到什么问题都可以反馈给我,我都会尽力帮你们解决 第一种:通过net start mysql启动MySQL服务器时,出现以下信息 是因为在MySQL5.7以上的版本中默认的没 ...

  9. maven install resources failed: newPosition < 0: (-1 < 0)

    添加以下代码在 pom.xml 中,具体参阅这里 <build> <plugins> <plugin> <groupId>org.apache.mave ...

  10. grpc-java源码环境编译

    1. Clone 1.1 git clone https://github.com/grpc/grpc-java.git 1.2 idea 打开grpc-java工程 2.compile 2.1 ja ...