2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest- H. Rikka with A Long Colour Palette -思维+贪心


【Problem Description】

有\(k\)种颜色,给你\(n\)个区间段,选择一种合适的方案给每个区间段染色,使得最终染色次数等于\(k\)次的长度和最大。

【Solution】

将左右端点放在一起排序,但是标记出它是左端点,还是右端点,并且记录每个端点属于第几个区间,排序后,对于每个左端点,从未使用过的颜色中选一个染色此区间,若连续染色超过\(k\)次,则多于的区间放入栈中备用,当某次染色小于\(k\)次时拿出来染色。当遇到右端点时,若这段区间染过色,则将此颜色收回,若没染过色,随意染色即可。

最重要的,一定要按格式输出,末尾不能有空格


【Code】

/*
* @Author: _Simon_
* @Date: 2019-10-30 10:44:14
* @Last Modified by: Simon
* @Last Modified time: 2019-10-30 10:44:14
*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define maxn 200005
#define INF 0x3f3f3f3f
struct node{
int first,second,ord;
node(){}
node(int first,int second,int ord):first(first),second(second),ord(ord){}
bool operator <(const node&a) const{
if(first==a.first) return second<a.second;
return first<a.first;
}
};
vector<node>a;
int ans[maxn];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int T;cin>>T;
while(T--){
memset(ans,0,sizeof(ans));
a.clear();
int n,k;cin>>n>>k;
for(int i=1;i<=n;i++){
int l,r;cin>>l>>r;
a.push_back({l,1,i});
a.push_back({r,-1,i});
}
sort(a.begin(),a.end());
queue<int>q;stack<int>st;
for(int i=1;i<=k;i++) q.push(i);
int tmp=0,pret=0,preidx=0;
for(int i=0;i<a.size();i++){
if(a[i].second>0){ //左端点
if(tmp<k){ //连续染色小于k次
tmp++;
ans[a[i].ord]=q.front();q.pop(); //从未染色的颜色中选出一个染色
}else{
st.push(a[i].ord); //染色大于k次,备用
}
}else{ //右端点
if(ans[a[i].ord]){ //若所在区间染过色
q.push(ans[a[i].ord]); //收回颜色
tmp--;
}else{
ans[a[i].ord]=1; //否则随意染色
}
}
if(i+1<a.size()&&a[i].first==a[i+1].first) continue; //同样端点一起处理
while(tmp<k){ //若染色小于k次,从备用端点中选取
while(!st.empty()&&ans[st.top()]) st.pop();
if(st.empty()) break;
tmp++;
ans[st.top()]=q.front();st.pop();q.pop();
}
if(pret>=k) ans[0]+=a[i].first-preidx; //计算染色次数等于k次的长度
preidx=a[i].first;pret=tmp;
}
cout<<ans[0]<<endl;
for(int i=1;i<=n;i++) cout<<ans[i]<<" \n"[i==n]; //按格式输出
}
return 0;
}

2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest- H. Rikka with A Long Colour Palette -思维+贪心的更多相关文章

  1. The 2019 ICPC Asia Shanghai Regional Contest H Tree Partition k、Color Graph

    H题意: 给你一个n个节点n-1条无向边构成的树,每一个节点有一个权值wi,你需要把这棵树划分成k个子树,每一个子树的权值是这棵子树上所有节点权值之和. 你要输出这k棵子树的权值中那个最大的.你需要让 ...

  2. 2019-2020 ICPC, Asia Jakarta Regional Contest H. Twin Buildings

    As you might already know, space has always been a problem in ICPC Jakarta. To cope with this, ICPC ...

  3. ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków

    ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...

  4. 2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)

    2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACE ...

  5. 2019 ICPC Asia Xuzhou Regional

    目录 Contest Info Solutions A. Cat B. Cats line up C. <3 numbers E. Multiply F. The Answer to the U ...

  6. 2018-2019, ICPC, Asia Yokohama Regional Contest 2018 K

    传送门:https://codeforces.com/gym/102082/attachments 题解: 代码: /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ...

  7. 2018 ICPC Asia Jakarta Regional Contest

    题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 .  :  待补 A. Edit Distance Thin ...

  8. Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机

    题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可 ...

  9. Gym - 101981M The 2018 ICPC Asia Nanjing Regional Contest M.Mediocre String Problem Manacher+扩增KMP

    题面 题意:给你2个串(长度1e6),在第一个串里找“s1s2s3”,第二个串里找“s4”,拼接后,是一个回文串,求方案数 题解:知道s1和s4回文,s2和s3回文,所以我们枚举s1的右端点,s1的长 ...

随机推荐

  1. 【NPDP笔记】第三章 新产品流程

      3.1 产品开发,风险与汇报的过程,开发实践和流程提升成功率 管控新产品失败的风险,随着成本增加,风险降低 知识能改改进决策,降低风险,决策框架 识别问题与机会 收集信息 组织记录,组织员工 外部 ...

  2. Jenkins - 分布式构建

    1 - 简介 Jenkins支持分布式多节点(Master-Slave)运行模式. 将安装Jenkins的主机作为Master节点,然后通过界面配置(或远端启动服务)来添加Slave节点. 在这种部署 ...

  3. Zabbix 3.0 配置企业微信报警(配置zabbix-web)

    一.添加报警媒体类型 Name:自定义 Type:选择script Scripts name:填写脚本名称 Script parameters:脚本参数 --corpid=XXX --corpsecr ...

  4. mybatis批量新增或更新

    mysql中在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE时,向数据库中插入一条记录: 若插入数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作(UPDA ...

  5. CentOS7 初始化硬盘分区、挂载、重启自动挂载

    挂载硬盘设备到本地有一下步骤: 1.通过fdisk -l命令,查看硬盘信息 可以看到有两块磁盘/dev/vda和/dev/vdb vda是系统盘,vdb使我们新增的数据盘,在上图中其实已经挂载完成(设 ...

  6. Oracle Spatial分区应用研究之五:不同分区粒度+本地空间索引效率对比

    1.实验目的 若使用本地空间索引,不同分区粒度将产生不同索引组织,其索引分区个数.大小.R-TREE树结构均不相同.那么,在什么分区粒度下的本地空间索引效率较高呢? 2实验数据 实验数据为全国2531 ...

  7. Linux内核中的双向链表struct list_head

    一.双向链表list_head Linux内核驱动开发会经常用到Linux内核中经典的双向链表list_head,以及它的拓展接口和宏定义:list_add.list_add_tail.list_de ...

  8. python的帮助信息的写法

    # coding = utf-8from optparse import OptionParserfrom optparse import OptionGroup usage = 'Usage: %p ...

  9. Maven中dependencyManagement作用说明

    https://blog.csdn.net/helllochun/article/details/81564921 在Maven多模块的时候,管理依赖关系是非常重要的,各种依赖包冲突,查询问题起来非常 ...

  10. git pull 出现 WARNING: POSSIBLE DNS SPOOFING DETECTED!

    此时不管你是git pull 还是clone 都报错如下: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: ...