D. Pairs of Segments(最大不相交区间数量)

news2024/11/16 13:48:54

Problem - D - Codeforces

给定一个由n个线段组成的数组[[l1,r1],[l2,r2],…,[ln,rn]],其中每个线段用左右端点表示。如果存在至少一个x满足l1≤x≤r1且l2≤x≤r2,则称线段[l1,r1]和[l2,r2]相交。

如果k为偶数,并且可以将该数组的元素分成k/2对,使得:

每个数组元素都属于恰好一对; 每对中的线段彼此相交; 不同对之间的线段互不相交。

则称该线段数组为beautiful。例如,线段数组[[2,4],[9,12],[2,4],[7,7],[10,13],[6,8]]就是beautiful的,因为可以以以下方式形成3对:

第一个元素(线段[2,4])和第三个元素(线段[2,4]); 第二个元素(线段[9,12])和第五个元素(线段[10,13]); 第四个元素(线段[7,7])和第六个元素(线段[6,8])。

可以看到,每对中的线段相交,不同对之间的线段不相交。

你需要从该数组中删除尽可能少的元素,使得剩余的线段数组beautiful。

输入格式 第一行包含整数t(1≤t≤1000) —— 测试用例数。

每个测试用例包含两行,第一行是整数n(2≤n≤2000),表示数组中线段的个数。接下来n行,每行包含两个整数li和ri(0≤li≤ri≤109),表示线段的左右端点。

输入数据保证所有测试用例中n的总和不超过2000。

输出格式 对于每个测试用例,输出一个整数——你需要删除的最小元素数量,使得剩余的线段数组beautiful。

Example

Input

Copy

 

3

7

2 4

9 12

2 4

7 7

4 8

10 13

6 8

5

2 2

2 8

0 10

1 2

5 6

4

1 1

2 2

3 3

4 4

Output

Copy

1
3
4

题解:
写本题前,我们要知道一个知识点

[区间问题] 最大不相交区间数量(区间问题+贪心)

[区间问题] 最大不相交区间数量(区间问题+贪心)_Ypuyu的博客-CSDN博客

我们可以把符合条件的区间合并为1个,接着求这么多区间里面,最大不相交区间数量

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
 #define int long long
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N = 4e6 + 10;
int mod = 1e9 + 7;
struct node
{
	int l,r;
}a[N],b[N];
bool cmp(node a,node b)
{
	if(a.r == b.r)
	return a.l < b.l;
	return a.r < b.r;
}
void solve()
{
	int n;
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i].l >> a[i].r;
	}
	sort(a + 1,a + 1 + n,cmp);
	int cnt = 0;
	for(int i = 1;i <= n;i++)
	{
		for(int j = i + 1;j <= n;j++)
		{
			if(a[i].r >= a[j].l)
			{
				b[++cnt] = {min(a[j].l,a[i].l),max(a[j].r,a[i].r)};
			}
		}
	}
	sort(b + 1,b + 1 + cnt,cmp);
	int ans = 0;
	if(cnt)
	ans++; 
	int r = b[1].r;
	for(int i = 2;i <= cnt;i ++)
	{
		if(b[i].l > r)
		{
			ans++;
			r = b[i].r;
		}
	}
	cout << n - ans*2 <<"\n";
	
}
signed main()
{
	ios::sync_with_stdio(0 );
	cin.tie(0);cout.tie(0);
	int t = 1;
	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/671041.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VTK裁剪【3】-vtkClipPolyDatavtkPolyPlane问题

前言&#xff1a;本博文主要记录vtkClipPolyData中采用vtkPolyPlane作为裁剪工具时的出现的问题&#xff0c;供各位小伙伴进行参考&#xff0c;避免踩坑&#xff01; 目录 vtkPolyPlane介绍及作用 vtkClipPolyData原理 实现流程&#xff1a; 问题所在&#xff1a; 需求&…

css绘制网格背景

文章目录 前言效果图说明 前言 本篇文章主要简单扼要的去实现css网格背景&#xff0c;并进一步探求其应用原理 效果图 css代码 body::before, body::after {position: fixed;top: 0;left: 0;right: 0;bottom: 0;content: ;background-repeat: repeat;pointer-events: none;o…

企业特权密码管理

随着企业中特权帐户的激增&#xff0c;必须保护的密码数量也大幅增长。跟踪所有这些密码是一项艰巨的任务&#xff0c;为避免敏感密码管理不善&#xff0c;管理员需要在集中式存储库下清点属于所有部门的密码&#xff0c;并管理对它们的直接控制。 部署PMP的好处 PMP是一个安…

Baumer工业相机堡盟工业相机如何使用新版本NEOAPI SDK控制相机数据流的开启和关闭(C#)

Baumer工业相机堡盟工业相机如何使用新版本NEOAPI SDK控制相机数据流的开启和关闭&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机NEOAPI SDK的技术背景Baumer工业相机使用NEOAPISDK控制相机数据流的方式1.引用合适的类文件2.使用NEOAPISDK控制相机数据流的方式2.使用…

市场模式下光伏用户群的电能共享与需求响应模型(matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《市场模式下光伏用户群的电能共享与需求响应模型》&#xff0c;为了使光伏用户群内各经济主体能实现有序的电能交易&#xff0c;提出了一种基于光伏电能供需比&#xff08;SDR&#xff09;的内…

JavaScript实现伪随机正态分布

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言什么是正态分布&am…

Jenkins+Allure+Pytest的持续集成

一、配置 allure 环境变量 1、下载 allure是一个命令行工具&#xff0c;可以去 github 下载最新版&#xff1a;https://github.com/allure-framework/allure2/releases 如果你想学习Pytest自动化测试&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全…

图扑智慧地下采矿,“像素游戏”智能呈现

在这个像素世界里&#xff0c;我们需要一个智能地下采矿可视化综合管理平台&#xff0c;来帮助我们管理和监控地下采矿全流程。 图扑软件依托自主研发的 HT for Web 产品&#xff0c;结合三维定制化渲染、动态模拟、物理碰撞、5G、物联网、云计算及大数据等先进技术&#xff0c…

vue+leaflet笔记之热力图

vueleaflet笔记之热力图 文章目录 vueleaflet笔记之热力图开发环境代码简介插件简介与安装使用简介 详细源码(Vue3) 本文介绍了Web端使用 Leaflet开发库展示热力图方法 (底图来源:天地图)&#xff0c;结合leaflet.heat插件可以很容易的做出热力图&#xff0c;通过调整其配置参…

旧系统重构遇到的种种问题

首先我将原来springboot版本升级到2.7.9&#xff0c;spring的docker分层和启动受到了影响&#xff0c;这个在docker镜像大小问题已经讲过&#xff0c;不再赘述&#xff0c;因为维护的人变成为一个人&#xff0c;因此我需要将各代码的版本进行统一&#xff0c;方便维护。 5 sun.…

数据治理(数据模型,数据规范,数据安全,数据成本,元数据,数据质量等)

数据治理是什么?为什么要做数据治理?关于数据治理我们需要做什么? 数据治理无论是在数仓建设过程中还是数仓建设完成之后都是及其重要的,是数据部门基础建设的必经之路,是降本提效,形成企业数据资产的关键一环 一 数据质量管理 1.1 数据质量基本概念 ●数据质量管理(Dat…

【Java-SpringBoot+Vue+MySql】Day3.1-SpringBoot Web开发

目录 前期回顾——SpringBoot与Maven 一、web入门 1、知识点密集区 &#xff08;1&#xff09;spring web依赖 &#xff08;2&#xff09;控制器 ​ (3)路由映射 &#xff08;4&#xff09;URL映射 &#xff08;5&#xff09;Method匹配​编辑 &#xff08;6&#xff09…

一种基于FPGA的雷达综合显示模块技术方案

一、项目整 这是我们做过的一个项目&#xff0c;若有需求&#xff0c;请联系我。开放PCB和软件技术。 以FPGA为核心&#xff0c;开发设计具有多路图像/视频采集、处理、传输、显示等功能的嵌入式视频模块。可对多路SerDes接口输入的高速串行视频流数据进行解析&#xff0c;将…

NSSCTF MOBILE [SWPU 2019]easyapp 详细题解

文章目录 一. 前言二. 安装安卓SDK三. 安装安卓模拟器(推荐夜神模拟器)四. 安装frida和objection五. 解题过程六. 总结 一. 前言 题目地址:[SWPU 2019]easyapp大佬题解[SWPU 2019]easyapp pwjcw的WriteUp 大佬的题解很简单,直接hook就可以看到返回值,但是我看了半天没看明白是…

通过源码分析为什么不推荐使用Executors线程池

线程池是 Java 并发编程中不可缺少的一部分。JDK 提供了一个方便快捷的线程池工具类 Executors&#xff0c;提供了多种创建线程池的静态方法&#xff0c;但是在实际使用中&#xff0c;我们不建议直接使用 Executors 提供的线程池工具类。本篇博客将通过分析 Executors 源码&…

【高性能计算】基于K均值的划分聚类实验

【高性能计算】基于K均值的划分聚类实验 实验目的实验内容实验步骤1、k均值聚类算法1.1 k均值聚类算法的基本思想1.2 k均值聚类算法的聚类过程1.3 k均值聚类算法的算法叙述 2、使用Python语言编写k均值聚类算法的源程序代码并分析其分类原理2.1 读取文件数据并进行可视化2.2 利…

推荐系统中的EE算法

人生中有很多选择问题&#xff0c;当每天中午吃饭的时候&#xff0c;需要选择吃饭的餐馆&#xff0c;那么就面临一个选择&#xff0c;是选择熟悉的好吃的餐馆呢&#xff0c;还是冒风险选择一个没有尝试过的餐馆呢。同样的&#xff0c;推荐系统处处也面临着这样的选择&#xff0…

操作系统 复习-计算题

一. 计算题&#xff08;共5题&#xff0c;100分&#xff09; 1.(计算题) 假设有4个进程需要在单CPU上运行&#xff0c;它们的执行时间如下表所示&#xff1a; 进程ID执行时间P18P25P32P44 现在我们需要按照抢占式优先级调度算法来安排这些进程的执行顺序。其中&#xff0c;进…

云原生之深入解析Kubernetes应用包管理器Helm的保姆级教程和实战

一、Helm 简介 ① 什么是 Helm&#xff1f; 我们可以将 Helm 看作 Kubernetes 下的 apt-get/yum&#xff0c;Helm 是 kubernetes 的包管理器&#xff0c;Helm 仓库里面只有配置清单文件&#xff0c;而没有镜像&#xff0c;镜像还是由镜像仓库来提供&#xff0c;比如 hub.dock…

【新星计划·2023】Linux内核、发行版讲解,它们有什么区别?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、Linux内核版 二、Linux发行版 1、Debian 2、Slackware 3、Red Hat 4、Gentoo 三、内核版和发行版的区别 1、内核版 2、发行…