当前位置: 首页 > news >正文

CodeForces 612D

奇妙的思维题。

题意:

给定n个区间,求被覆盖至少k次的区间(两端连续的区间可以合并)最少有多少个。

思路:

某个区间被覆盖至少k次,即这个区间的左端点包括左端点的前面应该至少包括给定的k个区间起点,且这些区间的终点至少有k个在这个区间右端点包括右端点的后面。

所以可以这么想:给定的区间的左端点会贡献1,右端点会贡献-1,然后根据这n个区间即2*n个数进行排序(如果数值相同,根据贡献从1到-1排)。然后扫一遍这2*n个数,当贡献达到k时,开始统计区间,统计到后面第一个贡献小于k的点。为什么统计到第一个贡献小于k的点,可以这么想,前面贡献达到k的区间段一直覆盖到这个第一个贡献小于k的点(这个点必是某个区间的右端点),虽然右端点贡献是-1,但其实是闭区间,所以统计区间的时候这个点也应该被包括。


#include <algorithm>
#include <iostream>
#include <string.h>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn = 1e6+5;
struct node
{
	int j, k;
	bool operator<(const node a) const
	{
		if(j == a.j) return k > a.k;
		return j < a.j;
	}
} jk[maxn*2];
vector<pair<int, int> > vt;
int main()
{
	int n, k, l, r;
	scanf("%d %d", &n, &k);
	for(int i = 0; i < n; ++i)
	{
		scanf("%d %d", &l, &r);
		jk[i*2].j = l;
		jk[i*2].k = 1;
		jk[i*2+1].j = r;
		jk[i*2+1].k = -1;
	}
	n *= 2;
	sort(jk, jk+n);
	for(int i = 1; i < n; ++i) jk[i].k += jk[i-1].k;
	for(int i = 0; i < n; ++i)
	{
		if(jk[i].k >= k)
		{
			l = jk[i].j;
			while(i < n && jk[i].k >= k) ++i;
			r = jk[i].j;
			vt.push_back(make_pair(l, r));
		}
	}
	cout << vt.size() << endl;
	for(int i = 0, up = vt.size(); i < up; ++i)
	{
		cout << vt[i].first << " " << vt[i].second << endl;
	}
	return 0;
}

继续加油~

相关文章:

  • 【leetcode】Factorial Trailing Zeroes(easy)
  • 数学知识小记
  • [SQL]mysql密码读取
  • CodeForces 616E(数学规律)
  • MongoDB aggregate 运用篇(转)
  • 二分图的概念汇总
  • HDU 1429(状压+bfs)
  • 树莓派系统安装初级教程
  • POJ 2528(线段树+离散化)
  • hadoop问题与解决办法
  • HDU 4725(最短路之建图难点)
  • QDU首届易途杯大赛-kk与cillyb的荣誉之战
  • Visual Studio 有哪些好用的插件?
  • QDU首届易途杯大赛-ycb老师与一道简单的物理题
  • SqlTest(2013-07-10)
  • 「面试题」如何实现一个圣杯布局?
  • 0x05 Python数据分析,Anaconda八斩刀
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • JS题目及答案整理
  • Laravel 菜鸟晋级之路
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • mockjs让前端开发独立于后端
  • nginx 负载服务器优化
  • Python学习笔记 字符串拼接
  • Sass Day-01
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 使用agvtool更改app version/build
  • MPAndroidChart 教程:Y轴 YAxis
  • NLPIR智能语义技术让大数据挖掘更简单
  • puppet连载22:define用法
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (二)springcloud实战之config配置中心
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)Oracle 9i 数据库设计指引全集(1)
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ..回顾17,展望18
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET CF命令行调试器MDbg入门(一)
  • .NET Standard 的管理策略
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .Net中wcf服务生成及调用
  • @Pointcut 使用
  • @Transactional类内部访问失效原因详解
  • @基于大模型的旅游路线推荐方案
  • [Hadoop in China 2011] 蒋建平:探秘基于Hadoop的华为共有云