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)的更多相关文章

  1. 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 ...

  2. hdu 6301 Distinct Values (贪心)

    Distinct Values Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  3. HDU 6301 Distinct Values

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6301 多校contest1 题目大意是有一个长度为N的数组,给出M个"事实",每个 ...

  4. hdu 6301 Distinct Values(贪心)题解

    题意:长为n的串,给你m个区间,这些区间内元素不重复,问这样的串字典序最小为? 思路:用set保存当前能插入的元素,这样就能直接插入最小元素了.对操作按l排序,因为排过的不用排,所以两个指针L,R是一 ...

  5. hdu 6301 Distinct Values (双指针,水题)

    大意: 给定m个区间, 求构造一个长n且字典序最小的序列, 使得每个区间内的数各不相同 求出每个位置为左端点时向右延伸最大距离, 然后双指针, 每次从set中取最小 #include <iost ...

  6. HDU 6301.Distinct Values-贪心、构造字典序最小的数列 (2018 Multi-University Training Contest 1 1004)

    HDU6301.Distinct Values 这个题就是给你区间要求区间内的数都不相同,然后要求是字典序最小,直接贪心走一遍,但是自己写的时候,思路没有错,初始化写挫了... 将区间按左端点小的排序 ...

  7. 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 ...

  8. hdu多校1004 Distinct Values

    Distinct Values Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): ...

  9. HDU 多校对抗赛 D Distinct Values

    Distinct Values Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

随机推荐

  1. mysql数据精度丢失问题深入探讨

    不要盲目的说float和double精度可能发生丢失,而是说在存取时因为精度不一致会发生丢失,当然这里的丢失指的是扩展或者截断了,丢失了原有的精度.decimal是好,但不是说不会发生任何精度丢失.如 ...

  2. thinkphp url和路由

    一.入口模块修改 修改public下的index 加入 define('BIND_MODULE','admin'); 即可将入门模块绑定到admin模块 <?php // [ 应用入口文件 ] ...

  3. flask之url_for函数

    一:url_for函数 干什么的?传入函数名,得到函数的路由地址(访问视图函数的地址) from flask import Flask from flask import url_for app = ...

  4. Java初步

    Java的核心优势:跨平台 Java SE:标准版Java EE:企业级Java ME:微型版 源文件(*.java)→编译器→字节码文件(*.class)→(类装载器→字节码校验器→解释器)[JRE ...

  5. 对webpack的初步研究6

    Plugins 插件是webpack 的支柱.webpack本身构建在您在webpack配置中使用的相同插件系统上! 它们也是这样做的目的别的,一个装载机无法做到的. Anatomy webpack  ...

  6. [USACO2011 Feb]Best Parenthesis

    Time Limit: 10 Sec Memory Limit: 128 MB Description Recently, the cows have been competing with stri ...

  7. php str_replace与substr_replace的区别

    函数定义: str_replace() :函数替换字符串中的一些字符(区分大小写). substr_replace() :函数把字符串的一部分替换为另一个字符串. 区别: str_replace()和 ...

  8. R语言rvest包网络爬虫

    R语言网络爬虫初学者指南(使用rvest包) 钱亦欣 发表于 今年 06-04 14:50   5228 阅读   作者 SAURAV KAUSHIK 译者 钱亦欣 引言 网上的数据和信息无穷无尽,如 ...

  9. Step3 - How to: Host and Run a Basic Windows Communication Foundation Service

    This is the third of six tasks required to create a Windows Communication Foundation (WCF) applicati ...

  10. EZOJ #386 最小生成树

    分析 先建出最小生成树 之后每次倍增找环即可 代码 #include<bits/stdc++.h> using namespace std; #define int long long s ...