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 ...
随机推荐
- 联想ideapad 310s如何进BIOS,换固态硬盘SSD,配置U盘启动,重装Win10系统
1. 如何进BIOS 关机情况下,捅一下Novo键,即可进入BIOS 2. 安装固态硬盘 Ideadpad 310S 本身自带的硬盘是5400转的机械硬盘,容量小速度慢.换的新的固态硬盘是SATA接口 ...
- python基础--6 集合
#1.不同元素组成#2.无序#3.集合中的元素必须为不可变类型 a={1,2,3,4,5,(1,2,3)}print(a) #随机向集合添加元素a.add("sjsj")print ...
- WAF防火墙学习
正则解析神器 http://rick.measham.id.au/paste/explain.pl http://regexr.com/ http://regex101.com/ http://www ...
- php内置函数分析之ucwords()
PHP_FUNCTION(ucwords) { zend_string *str; char *delims = " \t\r\n\f\v"; register char *r, ...
- JavaWeb(九):上传和下载
表单 进行文件上传时, 表单需要做的准备: 1). 请求方式为 POST: <form action="uploadServlet" method="post&qu ...
- 【leetcode】870. Advantage Shuffle
题目如下: 解题思路:几千年前,一个古人曾经解过这个题目,他的名字叫做田忌,后人称他的解题思想叫做“田忌赛马”.言归正传,本题就是一个田忌赛马的问题,先将A与B进行排序,然后判断A[0]与B[0]的大 ...
- centos6.5安装nginx1.16.0
参考: centos7 编译安装nginx1.16.0( 完整版 ) https://blog.csdn.net/weixin_37773766/article/details/80290939 ...
- 【CF1243C】 Tile Painting【思维】
题意:给定长度为n的方块,要求染色,需要满足:当|j-i|>1且n%|j-i|==0时,两格颜色相同,求做多可以染多少种颜色 题解:求出n的所有质因子 1.若只有一种质因子,则答案为该质因子 2 ...
- github配置和使用
通过手册指导生产ssh key或取已有的ssh key root@iZwz93telmwbh624e5zetqZ:~# ls -al ~/.ssh total drwx------ root root ...
- 攻防世界 | CGfsb
所以题目要求是输入生日1926l