D. Survey in Class(贪心 + 分类讨论)

news2024/11/19 5:40:23

Problem - D - Codeforces

Zinaida Viktorovna 的历史课上有 n 名学生。今天的作业包括 m 个主题,但是学生们准备时间很短,所以第 i 个学生只学习了从 li 到 ri

(包括)的主题。

在课开始时,每个学生都将手举在 0 处。

老师想问一些主题。规则如下:

老师问主题 k。

如果学生已经学习了主题 k,则他将手举高 1;否则他将手放低 1。

每个主题 Zinaida Viktorovna 最多只能问一次。

找出调查后课堂上最高和最低手的高度之间的最大差值。

请注意,学生的手可以低于 0。

输入 每个测试包含多个测试用例。第一行包含测试用例的数量 t(1≤t≤104)。

每个测试用例的第一行包含两个整数 n 和 m(2≤n≤105,1≤m≤109) —— 分别为学生人数和主题数量。

每个测试用例的接下来的 n 行中,每行包含两个整数 li 和 ri(1≤li≤ri≤m)——表示第 i 个学生已学习的主题区间的端点。

保证对于所有测试用例,n 的总和不超过 105。

输出 对于每个测试用例,输出一个整数——调查后课堂上最高和最低手的高度之间的最大差值。

Example

Input

Copy

 

6

4 8

2 6

4 8

2 7

1 5

3 3

1 3

2 3

2 2

3 5

1 5

1 5

1 5

3 5

1 1

3 3

5 5

4 7

1 7

1 3

3 3

4 5

2 4

1 3

2 4

Output

Copy

6
4
0
2
12
2

在第一个测试用例中,Zinaida Viktorovna 可以询问主题5、6、7、8。那么第二个学生的手将会在高度为4的位置,第四个学生的手将会在高度为-2的位置,也就是说差值将会等于6。

在第二个测试用例中,你可以询问主题1和3。那么第一个学生的手将会在高度为2的位置,第三个学生的手将会在高度为-2的位置。所以差值将会是4.

在第三个测试用例中,无论询问哪组主题,最高手和最低手之间的差值都将为0。

在第五个测试用例中,您可以询问所有主题。然后第一个和第三个学生手的高度差将会是12。

题解:

通过观察,

如果两个区间都有一个值,都会加,

如果两个区间都没有一个值,都会减

我们可以发现最终一定是找两个区间最大不重合部分

首先我们找到三个值

1.最小的右边界l

2.最大的左边界r

3.最小的区间w

1.根据最小的右边界,对于每个区间,

他的左边界如果 > l,对于这个区间而言,最优结果一定是

a[i].r - a[i].l + 1

否则答案至少是a[i].r - l

2.根据最大的左边界,对于每个区间

他的右边界如果 < r,对于这个区间而言,最优结果一定是

a[i].r - a[i].l + 1

否则答案至少是r - a[i].l

3.根据最小的区间w

每个区间的最优答案贡献至少是,a[i].r - a[i].l + 1 - w

为啥要加上这一步,因为在前两步,会出现答案至少是

类似这种情况

本应该求两边的和,结果就求了一边

最终答案记得*2,因为找不重合的区间,相当于一个一直在加一个一直在减

#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 = 3e5 + 10;
int mod = 1e9 + 7;
struct nod
{
	int l,r;
}a[N];
void solve()
{
	int n,m;
	cin >> n >> m;
	int l = m;
	int r = 0;
	int w = 1e18;
	for(int i = 1;i <= n;i++)
	{
		int x,y;
		cin >> x >> y;
		l = min(l,y);
		r = max(r,x);
		a[i] = {x,y};
		if(y - x + 1 < w)
		{
			w = y - x + 1;
		}
	}
	int ans = 0;
	for(int i = 1;i <= n;i++)
	{
		if(a[i].l > l)
		ans = max(ans,a[i].r - a[i].l + 1);
		else
		ans = max(ans,a[i].r - l);
		if(a[i].r < r)
		ans = max(ans,a[i].r - a[i].l + 1);
		else
		ans = max(ans,r - a[i].l);
		
		
		ans = max(ans,a[i].r - a[i].l + 1 - w);
	}
	cout << 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/669980.html

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

相关文章

虚幻引擎程序化资源生成框架PCG(Procedural Content Generation Framework) 之一 PCG基础

可以和Houdini说拜拜了 文章目录 0. 概述1. 启动插件2. 工作逻辑2.1 添加PCGVolume2.2 创建PCGGraph2.3 编写PCGGraph逻辑 小结 0. 概述 Unreal Engine 5.2全新推出了程序化资源生成框架即Procedural Content Generation Framework下文简称PCG&#xff0c; 开发者可以通过PCG程…

CSDN 每日一练及周赛介绍

CSDN 每日一练及周赛介绍 每日一练每日一练入口 CSDN 周赛CSDN 周赛入口 相关社区每日一练社区入口CSDN 竞赛专区社区入口 每日一练题库每日一练速查每日一练题目题解速查入口 每日一练题解自行接管输入 根据题号进入题目预习提交新题目CSDN 编程比赛出题规范 吐槽 每日一练 C…

JavaWeb项目乱码问题

设置编码格式有三个地方&#xff0c; 一,用于设置网页发出到服务器上的编码格式为UTF-8&#xff0c;一般该代码会自动创建。 <% page contentType"text/html;charsetUTF-8" language"java" %> 二&#xff0c;服务器响应后发送的文件的编码格式为U…

从BNO055传感器获取IMU数据-1

最近学习惯导相关知识&#xff0c;BNO055是博世的绝对方向传感器&#xff0c;它结合了传感器数据和微处理器来过滤和组合数据&#xff0c;为用户提供空间中的绝对方向。 关于BNO055传感器 BNO055使用三个三轴传感器同时测量切向加速度&#xff08;通过加速度计&#xff09;&a…

【认知提升思维篇】之心灵之力的自我认可模式

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;普本…

深入浅出vite(一)--vite的优点及原理、性能优化

Vite 需要 Node.js 版本 14.18&#xff0c;16。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本。 背景 webpack支持多种模块化&#xff0c;将不同模块的依赖关系构建成依赖图来进行…

DevExpress WinForms功能区组件,让业务应用创建更轻松!(下)

DevExpress WinForms的Ribbon&#xff08;功能区&#xff09;组件灵感来自于Microsoft Office&#xff0c;并针对WinForms开发人员进行了优化&#xff0c;它可以帮助开发者轻松地模拟当今最流行的商业生产应用程序。 在上文中&#xff08;点击这里回顾>>&#xff09;&am…

Axure教程—中继器菜单

本文将教大家如何用AXURE中的中继器制作菜单&#xff08;不自动折叠其他菜单&#xff09; 一、效果 预览地址&#xff1a;https://8ao8gl.axshare.com 二、功能 1、点击菜单出现相应的子菜单 2、子菜单如果想折叠&#xff0c;点击相应的菜单 三、制作 &#xff08;1&#xff…

Java-@Transactional注解超详细

本文已收录于专栏 《Java》 目录 本文前言概念说明使用说明底层实现注意事项注解扩展总结提升 本文前言 Transactional注解是Spring框架中用于声明式事务管理的关键注解。本文将深入探讨Transactional注解的作用、使用方式和常见属性&#xff0c;并结合代码实例演示其在实际项目…

Adobe PS 2023、Adobe Photoshop 2023下载教程、安装教程

最后附下载地址 Adobe Photoshop 简介&#xff1a; Adobe Photoshop是一款广泛使用的图像处理软件&#xff0c;由Adobe公司开发。它提供了许多强大的工具和功能&#xff0c;可以用于图像编辑、合成、修饰、设计等各个领域。用户可以使用Photoshop来调整图像的亮度、对比度、色…

《水经注地图服务》如何快速发布墨卡托DAT缓存

《水经注地图服务》的快速发布功能是一个能够帮助用户实现快速发布地图服务的功能&#xff0c;并且提供常规情况下大多数用户所需的默认配置&#xff0c;让用户在发布地图时更加便捷。 前面为大家分享了《水经注地图服务》快速发布经纬度DAT缓存以及如何在水经微图中加载&…

项目管理甘特图,怎么做才能更高效?(附甘特图详细制作教程和模板)

如何制作项目管理的甘特图&#xff1f;给大家放几个模板感受下&#xff1a; 01 项目管理Excel套表 02 工程项目流程甘特图 03 项目进度横道图 04 生产制造排程规划图 05 项目日程表 06 项目进度计划表 甘特图制作教程&#xff0c;一共两种方法&#xff0c;大家按需选择&#x…

android注入so或者dex

本程序分为32位和64位&#xff0c;以及so中加载apk&#xff08;或者dex都可以&#xff09;。 代码地址&#xff1a;点击下载 &#xff08;一&#xff09;so注入 32位和64位so注入代码几乎相同&#xff0c;因此仅以32位为例说明so注入的过程。 arm64-v8a架构可以兼容armeabi…

SLF4J门面日志框架源码探索 | 京东云技术团队

1 SLF4J介绍 SLF4J即Simple Logging Facade for Java&#xff0c;它提供了Java中所有日志框架的简单外观或抽象。因此&#xff0c;它使用户能够使用单个依赖项处理任何日志框架&#xff0c;例如&#xff1a;Log4j&#xff0c;Logback和JUL(java.util.logging)。通过在类路径中…

单片机Hard fault 产生原因和错误跟踪的方法

一、单片机 Hard fault产生的原因 Hard fault产生的原因有两方面&#xff0c;硬件方面和软件方面。 ①硬件方面常见原因&#xff1a; 电源设计有错误&#xff0c;造成器件供电不稳&#xff1b; 电源质量不好&#xff0c;纹波&#xff0c;噪声过大&#xff1b; 器件接地不良&…

干货分享|HOOPS Web平台和Polygonica进行增材制造的云CAM服务示例

这篇文章提供了一个示例项目&#xff0c;展示了使用 Machineworks Polygonica 和 HOOPS Web 平台进行增材制造的云 CAM 服务。该项目作为一个示例&#xff0c;说明了如何在服务器端使用 Polygonica 与 HOOPS Communicator 和 Exchange 来开发云服务。 它涵盖了增材制造 CAM 的…

Android问题笔记-Android Studio编译报错:2 files found with path.....

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

看物联网技术ZETA如何帮助场馆实现数智化管理升级?

背景介绍&#xff1a; 江宁足球训练基地位于南京江宁区上坊镇境内,是江苏省女足及青少年足球发展基地。该基地总占地面积为333300平方米&#xff0c;其中房屋建筑面积有19000平方米&#xff0c;健身房350平方米&#xff0c;拥有9个标准足球场&#xff0c;曾承办多场甲级足球赛…

Java多线程与并发

1、JDK版本的选择 选择JDK8、JDK11进行讲解的原因&#xff1a;Oracle长期支持 2、进程和线程的区别 进程和线程的由来 3、进程与线程的区别 进程是资源分配的最小单位,线程是cpu调度的最小单位. 所有与进程相关的资源&#xff0c;都被记录在PCB(进程控制块)中。进程是抢占…

day08 教你用英语过海关

前言 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是沐风晓月&#xff0c;阿里云社区博客专家 &#x1f609;&#x1f609; &#x1f495; 座右铭&#xff1a; 先努力成长自己&#xff0c;再帮助更多的人,一起加油进…