题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6301

多校contest1

题目大意是有一个长度为N的数组,给出M个"事实",每个事实指明一段区间内数字各异,求最后字典序最小的数组。

贪心+构造,给所有"事实"按 边界(左边界优先)排序,然后扫一遍"事实",用一个队列保证用以构造的所有数字最小且区间内各异。

 #include <bits/stdc++.h>
using namespace std;
#define fst first
#define scd second
typedef pair<int ,int > pii; vector< pii > facts;
queue< int > num;
bool inq[+];
int ans[+]; int main(){
int Test;
scanf("%d",&Test);
while(Test--){
int N,M;
scanf("%d%d",&N,&M);
memset(inq,false,sizeof(inq));
while(!num.empty()) num.pop();
facts.clear();
for(int i=;i<=N;++i) ans[i]=;
for(int i=;i<M;++i){
pii tmp;
scanf("%d%d",&tmp.fst,&tmp.scd);
if(tmp.fst!=tmp.scd) facts.push_back(tmp);
}
sort(facts.begin(),facts.end());
int lastr=-,lastl=-;
for(int i=;i<facts.size();++i){
int l=facts[i].fst,r=facts[i].scd;
if(r<=lastr) continue;
if(l>lastr){
while(!num.empty()) {
inq[num.front()]=false;
num.pop();
}
int cnt=;
for(int i=l;i<=r;++i){
int flag=;
while(!flag){
if(!inq[cnt]){
inq[cnt]=true;
num.push(cnt);
ans[i]=cnt;
flag=;
}
cnt++;
}
}
lastr=r;
lastl=l;
continue;
}
if(l<=lastr){
for(int i=;i<l-lastl;++i) {
inq[num.front()]=false;
num.pop();
}
int cnt=;
for(int i=lastr+;i<=r;++i){
int flag=;
while(!flag){
if(!inq[cnt]){
inq[cnt]=true;
num.push(cnt);
ans[i]=cnt;
flag=;
}
cnt++;
}
}
lastl=l;
lastr=r;
continue;
}
}
for(int i=;i<=N;++i) printf("%d%c",ans[i],i==N?'\n':' ');
}
return ;
}

HDU 6301 Distinct Values的更多相关文章

  1. hdu 6301 Distinct Values (思维+set)

    hdu 6301 Distinct Values 题目传送门 题意: 给你m个区间,让你求出一个长度为n的区间且满足在这些区间的数不重复, 并且要求字典序最小 思路: 如果我们已经求出这个序列了,你会 ...

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

  3. hdu 6301 Distinct Values (贪心)

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

  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. (32)forms组件(数据校验)

    forms组件的用处 1.就是用来做数据校验的 2.渲染页面 3.渲染错误信息(和局部刷新同效果) 数据校验 要使用forms组件必须要写一个类继承forms组件 urls.py from bbs01 ...

  2. js 自定义类Android吐司提示框

    (function(){     var mouseX = 0;     var mouseY = 0;     //定义一个全局toaslist用来存在新建的吐司     var toastLsit ...

  3. FTP服务-filezilla server 配置

    一.下载Filezilla  Server 官网网址:https://filezilla-project.org/download.php?type=server 二.安装Filezilla  Ser ...

  4. list实现大整数加法

    #include<iostream> #include<list> #include<string> using namespace std; list<in ...

  5. C++对象的构造、析构与拷贝构造

    今天下午在研究虚函数的时候遇到了一个问题,觉得很有意思,记录一下. 先看代码: class Base { public: Base(int value) { m_nValue = value; cou ...

  6. Spring Web常见面试问题

    一.Web容器初始化过程 先初始化listener,然后是filter,然后是servlet. 二.Spring MVC项目中IOC容器关系 Web容器启动时通知ContextLoaderListen ...

  7. py-day3-2 python 函数递归

    # 递归 def calc(n): print(n) if int(n/2) == 0: return n res = calc(int(n/2)) return res res = calc(10) ...

  8. MDX函数

    MDX重点函数 成员函数 1..CurrentMember 获取运行时当前的成员,用法:<Dimension>.CurrentMember . 2..Parent 获取运行时当前的成员的父 ...

  9. 如何系统学习知识图谱-15年+IT老兵的经验分享

    一.前言 就IT而言,胖子哥算是老兵,可以去猝死的年纪,按照IT江湖猿龄的规矩,也算是到了耳顺之年:而就人工智能而言,胖子哥还是新人,很老的新人,深度学习.语音识别.人脸识别,知识图谱,逐个的学习了一 ...

  10. 【剑指offer】广度优先遍历二叉树

    问题:从上往下打印出二叉树的每个节点,同层节点从左至右打印. *思路:先用队列存放树的根结点.每次出队一个结点,将结点非空的左右孩子分别入队.重复此过程,直到队列为空. import java.uti ...