hdu 6301 Distinct Values (思维+set)
hdu 6301 Distinct Values
题意:
给你m个区间,让你求出一个长度为n的区间且满足在这些区间的数不重复,
并且要求字典序最小
思路:
如果我们已经求出这个序列了,你会发现,如果大的区间已经满足条件了,
那么它包含的小区间也已经满足了。
然后它要求字典序最小,这个从左往右去填充就行了,每次都有能取的最小的
数去填充进去,这样形成的序列自然符合
所以我们需要一个容器来存储能用的数,假设我们处理完i这个位置,要过度到下一个,
如果i+1还在这个区间还好,如果不在,那么我们就要更新这个容器了,因为此时它
可以选择的数有更多。而我们要增加的数,就是上一个区间与这个区间没有交集的地方
,即两个区间最左端点的刚刚加进去的数。
具体注释看代码。
代码:
#include<bits/stdc++.h>
using namespace std;
int T;
int n,m;
#define N 100005
typedef pair<int,int> PII;
#define fi first
#define se second
PII ipt[N];
int ans[N];
int pre[N];
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d %d",&n,&m); //初始化
for(int i=;i<=n;i++)
{
pre[i]=i;
ans[i]=;
}
//pre记录每个最大区间的左端点
for(int i=;i<=m;i++)
{
scanf("%d %d",&ipt[i].fi,&ipt[i].se);
pre[ipt[i].se]=min(pre[ipt[i].se],ipt[i].fi);
} //把那些零散的点也用包含它的最大区间包括进去
for(int i=n-;i>=;i--)
{
if(pre[i]>pre[i+]) pre[i]=pre[i+];
} set<int>mu;
mu.clear();
for(int i=;i<=n;i++) mu.insert(i); for(int i=;i<=n;i++)//给每个位置赋值
{
for(int j=pre[i-];j<pre[i];j++)//更新目标集合
{
mu.insert(ans[j]);
}
ans[i]=*mu.begin();
mu.erase(mu.begin());
} for(int i=;i<=n;i++)
{
printf("%d%c",ans[i],i==n?'\n':' ');
}
}
return ;
}
hdu 6301 Distinct Values (思维+set)的更多相关文章
- hdu 6301 Distinct Values (2018 Multi-University Training Contest 1 1004)
Distinct Values Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- hdu 6301 Distinct Values (贪心)
Distinct Values Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 6301 Distinct Values
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6301 多校contest1 题目大意是有一个长度为N的数组,给出M个"事实",每个 ...
- hdu 6301 Distinct Values(贪心)题解
题意:长为n的串,给你m个区间,这些区间内元素不重复,问这样的串字典序最小为? 思路:用set保存当前能插入的元素,这样就能直接插入最小元素了.对操作按l排序,因为排过的不用排,所以两个指针L,R是一 ...
- hdu 6301 Distinct Values (双指针,水题)
大意: 给定m个区间, 求构造一个长n且字典序最小的序列, 使得每个区间内的数各不相同 求出每个位置为左端点时向右延伸最大距离, 然后双指针, 每次从set中取最小 #include <iost ...
- HDU 6301.Distinct Values-贪心、构造字典序最小的数列 (2018 Multi-University Training Contest 1 1004)
HDU6301.Distinct Values 这个题就是给你区间要求区间内的数都不相同,然后要求是字典序最小,直接贪心走一遍,但是自己写的时候,思路没有错,初始化写挫了... 将区间按左端点小的排序 ...
- 2018 Multi-University Training Contest 1 Distinct Values 【贪心 + set】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6301 Distinct Values Time Limit: 4000/2000 MS (Java/Ot ...
- hdu多校1004 Distinct Values
Distinct Values Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): ...
- HDU 多校对抗赛 D Distinct Values
Distinct Values Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
随机推荐
- 使用GDB调试产生多进程的程序
如果一个进程fork了多个进程,这时使用GBD工具对程序进行调试会如何呢? 实际上,GDB 没有对多进程程序调试提供直接支持.例如,使用GDB调试某个进程,如果该进程fork了子进程,GDB会继续调试 ...
- luogu2046 海拔
题目链接[NOI2010]海拔 首先有个性质就是海拔只会有\(0\)和\(1\)两种. 证明:海拔下降和人数乘积为总消耗,确定了海拔下降总数,如果有个地方可以使得单位消耗最小,那么全部消耗不会更劣. ...
- 转Serial,Parallel,CMS,G1四大GC收集器特点小结
转 https://blog.csdn.net/u013812939/article/details/48782343 1.Serial收集器 一个单线程的收集器,在进行垃圾收集时候,必须暂停其他所有 ...
- Clean Docker <none>:<none>
https://www.projectatomic.io/blog/2015/07/what-are-docker-none-none-images/ Reference: https://www.p ...
- Linux命令行工具之pidstat命令
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11484624.html pidstat命令就可以帮助我们监测到具体线程的上下文切换 通过pidstat ...
- darknet-yolov3使用opencv3.4.8时,undefined reference 'imshow()'、'waitKey()'、'nameWindows()'
解决办法:暴力卸载 卸载办法:进入到opencv3.4.8的安装目录下:make uninstall 然后重新安装了其他版本的,立马编译通过了.
- python编程中的一个经典错误之list引用
请看下面代码 class User: def __init__(self, name, hobby=[]): self.name = name self.hobby = hobby def add_h ...
- ClickOnce是什么?如何使用?
ClickOnce是一种部署方式,主要解决C/S软件版本更新后,所有客户端都要重新安装的问题. 场景:假如,你的客户有1000个,你的服务端更新后,这1000个客户都要重新安装,难道要员工一个一个的电 ...
- php strlen()函数 语法
php strlen()函数 语法 作用:返回字符串的长度.大理石平台价格 语法:strlen(string) 参数: 参数 描述 string 必需.规定要检查的字符串. 说明:返回字符串的 ...
- linux find rm ls 逻辑非运用
需求场景描述 查找出除已知文件外的文件 办法: [root@VM_58_118_centos test]# .1_fv1..0_pv1..6_15752678845473..2_fv1..4_pv1. ...