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 ...
随机推荐
- docker可视化集中管理工具shipyard安装部署
docker可视化集中管理工具shipyard安装部署 Shipyard是在Docker Swarm实现对容器.镜像.docker集群.仓库.节点进行管理的web系统. 1.Shipyard功能 Sh ...
- sqli(9)
less9--基于时间的GET单引号盲注 前言 重写博客是为了赶作业,现在已经下定决心考研了.以后这个博客只会记录我的数学.英语.数据结构学习记录了.我还是 想使劲冲一把,但是最近羁绊太多.很多作业( ...
- 学Python的第八天
最近因为很多生活琐事+生病+培训耽误了好几天的学习,不过幸好身体feel fly!! 今天依旧是爱Python的一天-.- 前几天以及今天所列出来的Python魔法类型不需要死记硬背熬.... #!/ ...
- OGG-00303
解决方案:因为Defgen版本不同,注释数据定义文件对应的行 *Database type:ORACLE,用*在行首注释即可
- P.W.N. CTF - Web - Login Sec
题目 链接:https://ctftime.org/task/6934 题解 Login 1 题目给出了源码 var http = require('http'); const crypto = re ...
- jQuery ajax上传文件实例
jQuery ajax上传文件实例 <form id="form" enctype="multipart/form-data"><input ...
- WiFi密码新攻击破解方法,黑客攻破只需10秒
近日,中国知名黑客安全组织东方联盟研究人员透露了一种新的WiFi黑客技术,使黑客更容易破解大多数现代路由器的WiFi密码,并且攻破只需要10秒,速度非常快. 方法是利用由流行的密码破解工具Hashca ...
- 1N4148
摘自http://baike.baidu.com/link?url=0iTO7zZvHpCeJiZurTPpjDT95YdJu7cKdTeCWfol36b4JG5ii15leQ7K4wJWAZIBNb ...
- Windows 下搭建 SVN服务器
目录 一 .安装Visual SVN 二.配置SVN 三.安装TortoiseSVN 四.上传项目到远程仓库 五.从远程仓库下载项目 六.检出项目 七.版本回退 参考链接 https://blog ...
- 01-跨域-jsonp原理
jsonp能跨域,并不是因为它发送了ajax请求,而是利用动态创建的script标签. script标签没有收到浏览器同源策略的限制,是可以跨域访问的. 创建的script标签,把其src指向请求的服 ...