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. 在虚拟机Linux中安装VMTools遇到的问题-小结

    总结: 遇到的问题:No support for locale: zh_CN.utf8 可能的解决方法:1.sudo dpkg-reconfigure locale (重新配置?) 2.上一步失败,提 ...

  2. html a标签链接点击闪动问题解决

    <a href="#">链接点击会闪动,解决: 这三种都可以用:<a href="javascript:;"></a>< ...

  3. python特殊的类属性

    类C的特殊属性: C.__name__ 类C的名字 C.__doc__ 类C文档字符串 C.__bases__ 类C所有父类的元组 C.__dict__ 类C的属性 C.__module__ 类C所在 ...

  4. 11JSP基础

    1.Jsp基础 1.1 简介 Jsp,全称 Java Server Page java服务页面,能提供java服务的页面 jsp vs html html: 由html标签组成的,输出静态内容. js ...

  5. 前端每日实战:45# 视频演示如何用纯 CSS 创作一个菱形 loader 动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/eKzjqK 可交互视频教程 此视频 ...

  6. SPOJ QTREE - Query on a tree 【树链剖分模板】

    题目链接 引用到的大佬博客 代码来自:http://blog.csdn.net/jinglinxiao/article/details/72940746 具体算法讲解来自:http://blog.si ...

  7. JavaScript 复杂判断的更优雅写法借鉴

    前言: 我们编写js代码时经常遇到复杂逻辑判断的情况,通常大家可以用if/else或者switch来实现多个条件判断,但这样会有个问题,随着逻辑复杂度的增加,代码中的if/else/switch会变得 ...

  8. springboot+thymeleaf 访问静态资源解决(static)

    ---------------------------------------2.1.3-------------------------------------------------------- ...

  9. vu项目中按F5刷新element菜单没有根据路由匹配菜单解决办法

    element组件的菜单中设置:default-active,这个是选择哪个菜单的 然后在created里边增加 因为每次刷新都是要经过这个的.注意data里边也要同步.

  10. Magic Line

    Magic Line 玄学过题系列,随机选在所有点左下方的点,然后对其他点斜率排序,取斜率在中间两个点之间 比赛时,左下方点不够随机==,导致没卡过去 #include<bits/stdc++. ...