2018icpc 徐州h题
题目大意:
https://codeforces.com/gym/102012/problem/H?csrf_token=c9d0191a64a241166d54a565b1615125
区间[l , r] 中有n条线 问用k种颜色最多能染多少区间 并输出区间和r - l;
∑n <= 2e6,1 <= k <= 2e5,0 <= l < r <= 1e9。
解题思路:
把N*2 个端点排序, 对端点和颜色进行入队出队操作 当颜色为空时说明这个区间满足要求,并将此线段保留到延迟染色的队伍中等待下次染色
ac代码:
#include<bits/stdc++.h>
#define sz(x) ((int)x.size())
//#define mp(x, y) make_pair(x, y)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAXN = ;
int T, n, k, col[MAXN];
struct Node{
int st, id;
Node(){}
Node(int _st, int _id){//方便结构体赋值
st = _st; id = _id;
}
bool operator < (const Node &nd) const{//否则多定义一个cmd排序
if(st == nd.st) return id < nd.id;
return st < nd.st;
}
}seg[MAXN];
queue<int> rCol, rSeg;
int main(){
scanf("%d", &T);
while(T --){
scanf("%d%d", &n, &k);
while(sz(rCol)) rCol.pop();
while(sz(rSeg)) rSeg.pop();
for(int i = ; i <= n; i ++){
int l, r;
scanf("%d%d", &l, &r);
col[i] = ;
seg[i] = Node(l, i);
seg[i + n] = Node(r, -i);
}
if(n < k){
printf("0\n1");
for(int i = ; i <= n; i ++)
printf("");
printf("\n");
continue;
}
sort(seg + , seg + *n + );
for(int i = ; i <= k; i ++)
rCol.push(i);
ll ans = ;
for(int i = ; i <= *n; i ++){
if(sz(rCol) == )//没有颜色可染,此端点到前个端点必满足条件
ans += seg[i].st - seg[i - ].st;
if(seg[i].id > ){//左端点进来
if(sz(rCol)){//有颜色染色 ,没颜色放入延迟染色
int tc = rCol.front();
col[seg[i].id] = tc;
rCol.pop();
}
else
rSeg.push(seg[i].id);
}
else{//右端点出去
if(col[- seg[i].id])//已经染色则归还颜色
rCol.push(col[- seg[i].id]);
else//没有说明不做贡献
col[- seg[i].id] = ;
}
while(sz(rCol) && sz(rSeg)){
int tc = rCol.front();
int ts = rSeg.front();
rSeg.pop();
if(col[ts]) continue;//归还了颜色没有出队
col[ts] = tc;
rCol.pop();
}
}
printf("%I64d\n", ans);
for(int i = ; i <= n; i ++)
printf("%d%c", col[i], i == n ? '\n' : ' ');
}
return ;
}
2018icpc 徐州h题的更多相关文章
- hdu 4548 第六周H题(美素数)
第六周H题 - 数论,晒素数 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u De ...
- 2013年省赛H题
2013年省赛H题你不能每次都快速幂算A^x,优化就是预处理,把10^9预处理成10^5和10^4.想法真的是非常巧妙啊N=100000构造两个数组,f1[N],间隔为Af2[1e4]间隔为A^N,中 ...
- http://codeforces.com/gym/100623/attachments H题
http://codeforces.com/gym/100623/attachments H题已经给出来的,包括后来添加的,都累加得到ans,那么从1-ans都是可以凑出来的,如果ans<a[n ...
- 2019牛客暑期多校训练营(第三场)B题、H题
传送门 题意: 就是说给你一个由0或1组成的字符串,让你找出来一个0的数量和1的数量相等的最长子字符串和最长子序列 题解: 可以把0当作-1,把1当作1来计算字符串的前缀和 这样的话,当两个位置的前缀 ...
- 计蒜客 31460 - Ryuji doesn't want to study - [线段树][2018ICPC徐州网络预赛H题]
题目链接:https://nanti.jisuanke.com/t/31460 Ryuji is not a good student, and he doesn't want to study. B ...
- 计蒜客 31453 - Hard to prepare - [递归][2018ICPC徐州网络预赛A题]
题目链接:https://nanti.jisuanke.com/t/31453 After Incident, a feast is usually held in Hakurei Shrine. T ...
- 计蒜客 31459 - Trace - [线段树][2018ICPC徐州网络预赛G题]
题目链接:https://nanti.jisuanke.com/t/31459 样例输入 3 1 4 4 1 3 3 样例输出 10 题意: 二维平面上给出 $n$ 个点,每个点坐标 $\left( ...
- ACM-ICPC 2018徐州网络赛-H题 Ryuji doesn't want to study
死于update的一个long long写成int了 真的不想写过程了 ******** 树状数组,一个平的一个斜着的,怎么斜都行 题库链接:https://nanti.jisuanke.com/t/ ...
- 2018icpc徐州网络赛-H Ryuji doesn't want to study(线段树)
题意: 有n个数的一个数组a,有两个操作: 1 l r:查询区间[l,r]内$a[l]*(r-l+1)+a[l+1]*(r-l)+a[l+2]*(r-l-1)+\cdots+a[r-1]*2+a[r] ...
随机推荐
- 关于windows下编写的shell脚本在linux下无法运行报错问题
首先,你写的shell脚本必须是正确的, 其次,无法运行的原因:因为windows下的换行是两个字节,而你上传到linux,linux下换行是两个字节,所以编译的酒不正确的,导致无法 运行脚本, 这种 ...
- octave 笔记
1. 画函数 >> x = [-4:0.5:6] >> y = x.^2 - x - 6 >> plot(y)
- 日志(logging)与正则(re)模块
logging模块 #日志:日常的流水 =>日志文件,将程序运行过程中的状态或数据进行记录,一般都是记录到日志文件中 #1.logging模块一共分为五个打印级别 debug.info.warn ...
- c# MVC方式文件上传
MVC控制器中代码 index.cshtml <form action="/Home/Upload" method="post" enctype=&quo ...
- Maven的下载及安装
版权申明:本文为博主原创文章,欢迎大家转载.转载请声明转载处为:https://www.cnblogs.com/qxcxy-silence/p/10808321.html 1.下载Maven; 1). ...
- 解决Django项目静态资源无法访问的问题
静态资源无法访问 url.py中配置 from django.conf.urls import url from django.views import static from django.conf ...
- 学习Shell编程
目录 1 什么是Shell 2 Linux的启动过程 3 怎样编写一个Shell脚本 4 Shell脚本的执行方式 5 内建命令和外部命令的区别 6 管道和重定向 7 变量赋值 8 环境变量配置文件 ...
- Matlab---画图线型、符号及颜色
Matlab 画图 线形.颜色.数据点形状的选择 1,线形 - Solid line (default)-- Dashed line: Dotted line-. Dash-dot line 2,颜色 ...
- Ubuntu系统---安装QQ
使用Ubuntu很不方便,如果有什么消息的话,还要回到windows中查看.预想在Ubuntu上直接安装一个QQ,有网友说使用WebQQ发现老是掉线,于是这里安装QQ国际版. 首先,下载安装包. 这里 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具]
[易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具] 项目实战 实战5:实现BTC价格转换工具 今天我们来开发一个简单的BTC实时价格转换工具. 我们首先 ...