题目大意:

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

  1. hdu 4548 第六周H题(美素数)

    第六周H题 - 数论,晒素数 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   De ...

  2. 2013年省赛H题

    2013年省赛H题你不能每次都快速幂算A^x,优化就是预处理,把10^9预处理成10^5和10^4.想法真的是非常巧妙啊N=100000构造两个数组,f1[N],间隔为Af2[1e4]间隔为A^N,中 ...

  3. http://codeforces.com/gym/100623/attachments H题

    http://codeforces.com/gym/100623/attachments H题已经给出来的,包括后来添加的,都累加得到ans,那么从1-ans都是可以凑出来的,如果ans<a[n ...

  4. 2019牛客暑期多校训练营(第三场)B题、H题

    传送门 题意: 就是说给你一个由0或1组成的字符串,让你找出来一个0的数量和1的数量相等的最长子字符串和最长子序列 题解: 可以把0当作-1,把1当作1来计算字符串的前缀和 这样的话,当两个位置的前缀 ...

  5. 计蒜客 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 ...

  6. 计蒜客 31453 - Hard to prepare - [递归][2018ICPC徐州网络预赛A题]

    题目链接:https://nanti.jisuanke.com/t/31453 After Incident, a feast is usually held in Hakurei Shrine. T ...

  7. 计蒜客 31459 - Trace - [线段树][2018ICPC徐州网络预赛G题]

    题目链接:https://nanti.jisuanke.com/t/31459 样例输入 3 1 4 4 1 3 3 样例输出 10 题意: 二维平面上给出 $n$ 个点,每个点坐标 $\left( ...

  8. ACM-ICPC 2018徐州网络赛-H题 Ryuji doesn't want to study

    死于update的一个long long写成int了 真的不想写过程了 ******** 树状数组,一个平的一个斜着的,怎么斜都行 题库链接:https://nanti.jisuanke.com/t/ ...

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

随机推荐

  1. CodeFirst与EntityFramework

    项目添加EntityFramework命令:Install-Package EntityFramework CodeFirst默认规则1. 数据库映射:Code First 默认会在本地的SQL Ex ...

  2. 最简单的一个win32程序

    #include <windows.h> HINSTANCE g_hInst = NULL; //2 窗口处理函数 LRESULT CALLBACK WndProc( HWND hWnd, ...

  3. WaitType:ASYNC

    项目组有一个数据库备份的Job运行异常,该Job将备份数据存储到remote server上,平时5个小时就能完成的备份操作,现在运行19个小时还没有完成,backup命令的Wait type是 AS ...

  4. SIFT算法相关资料

    SIFT算法相关资料 一.SIFT算法的教程.源码及应用软件1.ubc:DAVID LOWE---SIFT算法的创始人,两篇巨经典经典的文章http://www.cs.ubc.ca/~lowe/ 2. ...

  5. How to Change the Default Theme Appearance [editing with no theme]

    Windows Live Writer has the ability to allow users to see their blog as it'd be posted as they are c ...

  6. 使用python2与python3创建一个简单的http服务(基于SimpleHTTPServer)

    python2与python3基于SimpleHTTPServer创建一个http服务的方法是不同的: 一.在linux服务器上面检查一下自己的python版本:如: [root@zabbix ~]# ...

  7. GDB调试器教程

    启动和退出GDBGDB(GNU Project Debugger)几乎适用于所有类Unix系统,小巧方便且不失功能强大,Linux/Unix程序员经常用它来调试程序. 总的来说有几下几种方法启动GDB ...

  8. Ubuntu安装libssl-dev失败(依靠aptitude管理降级软件)并记录dpkg展示安装软件列表

    Ubuntu 12.04LTS下直接安装 libssl-dev 失败 提示错误: $ sudo apt-get install libssl-dev Reading package lists... ...

  9. JVM命令jps

      jps是JVM的一个常用命令,类似linux中的ps命令.jps是查看java进程信息的命令:ps是查看linux系统中进程的命令   格式      jps [ options ] [ host ...

  10. mac系统 flutter从安装到第一个应用

    mac系统 安装flutter 分三步: 1. 安装flutter sdk 2. flutter环境变量配置 3. 建立flutter应用 Flutter SDK下载 打开终端执行命令 git clo ...