题解:CF1889C1-Doremy‘s Drying Plan (Easy Version)

题解:CF1889C1-Doremy’s Drying Plan (Easy Version)

一、 题意描述

1. 题目链接

(1) CF链接

CodeForces

(2) 洛谷链接

洛谷

2. 题目翻译

有一个长度为 n n n 的序列,上面有 n n n 个点,编号为 1 1 1 n n n。现在给定 m m m 个区间,第 i i i 个区间覆盖了序列中的 l i l_i li r i r_i ri 之间(包含两端)的所有点。你可以删除其中的 2 2 2 个线段,使得序列中未被任何线段覆盖的点数最大。
1 ≤ n ≤ 2 ⋅ 1 0 5 1\le n\le 2\cdot 10^5 1n2105, 2 ≤ m ≤ 2 ⋅ 1 0 5 2 \le m \le 2\cdot 10^5 2m2105, k = 2 k = 2 k=2
∑ n + m ≤ 2 ⋅ 1 0 5 \sum n+m\le2\cdot 10^5 n+m2105

二、 思路分析

观察数据范围, n n n m m m 都是 1 0 5 10^5 105 级别,所以考虑 O ( n + m ) O(n+m) O(n+m) 左右的算法,当然带上几个小 l o g log log 也没问题。
对于序列中所有的点,我们可以对它们进行分类:
①被 0 0 0 个区间覆盖;
②被 1 1 1 个区间覆盖;
③被 2 2 2 个区间覆盖;
④被 3 3 3 个或者更多个区间覆盖。
想要求出某个点是哪一类,我们可以在读入线段时记录差分。
显然,对于①类点,无论选择哪两条,它们都是“未被任何线段覆盖的点”,所以直接计入总数。
对于④类点,无论怎么选都无法让它们变成“未被任何线段覆盖的点”,所以它们被我们抛弃了。
如果只能删除一个线段,那么对最终答案所能产生的贡献自然是这个线段内②类点的数量,为了迅速求出它,我们需要维护一个前缀和,存储在某个点之前有多少个②类点。
显然,我们可以把每个线段按照这种贡献从大到小排序,选取最大的两个,把它们的贡献相加计入总数。
问题:这样求出的贡献一定是最大的吗?
显然不是!我们只能把贡献计入一个存储最终贡献的最大值的变量。如果两个线段有重叠,那么最终的贡献还要加上中间重叠部分的③类点总数(这个我们也用前缀和维护),但是如果继续用刚才的方法进行排序取出的最大两个有可能不是最优的。
于是我们考虑,被两个线段覆盖的点有哪些?我们可以遍历一遍每个节点,通过前缀和求出它被多少区间覆盖。但问题又来了,到底是哪两个区间呢?我们可以把线段的左端点和右端点加一分别扔进两个序列(记录一下差分维护的过程),按照端点下标排序,并记录到底是哪个线段,在遍历节点之前,用一个集合来维护那些线段覆盖到遍历到的点,最后遍历到每个点 i i i,左端点的序列里端点下标为 i i i 的元素先把对应的线段编号扔进这个集合,再把它从序列中删除,右端点加一的序列同理,只不过是把里面的线段编号从集合里删除。最后如果集合里是两条线段,就计算这两条线段的贡献,和之前的贡献取最大值。最后把贡献最大值累加到①类点数量才是答案。
具体实现还要看代码。

三、 时间代价

算法主体遍历线段、节点是 O ( n ⋅ m ) O(n\cdot m) O(nm) 的,但是维护一大堆集合和序列用到 s e t set set,需要乘上一个 O ( l o g ( m ) ) O(log(m)) O(log(m)),所以总共时间复杂度可以估计成 O ( ( n + m ) ⋅ l o g ( m ) ) O((n+m)\cdot log(m)) O((n+m)log(m))

四、代码实现

#include<bits/stdc++.h>
#define N 220000
using namespace std;
multiset<pair<int,int>>in={},out={};
multiset<int>inc1={};
set<int>xd={};
int c[N]={},c1[N]={},c2[N]={},l[N]={},r[N]={},s[N]={},s1[N]={},s2[N]={},ans=0,inc=0,k=0,m=0,n=0,t=0;
int main(){scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n+1;i++){c[i]=0;c1[i]=0;c2[i]=0;}in.clear();out.clear();for(int i=1;i<=m;i++){scanf("%d%d",&l[i],&r[i]);c[l[i]]++;c[r[i]+1]--;in.insert({l[i],i});out.insert({r[i]+1,i});}ans=0;for(int i=1;i<=n;i++){s[i]=s[i-1]+c[i];if(s[i]==0){ans++;}else{if(s[i]==1){c1[i]++;}else{if(s[i]==2){c2[i]++;}}}s1[i]=s1[i-1]+c1[i];s2[i]=s2[i-1]+c2[i];}inc1.clear();for(int i=1;i<=m;i++){inc1.insert(-(s1[r[i]]-s1[l[i]-1]));}inc=0;int x=*inc1.begin();inc1.erase(inc1.begin());int y=*inc1.begin();inc=max(inc,-(x+y));xd.clear();for(int i=1;i<=n;i++){while(out.empty()==false&&out.begin()->first==i){xd.erase(out.begin()->second);out.erase(out.begin());}while(in.empty()==false&&in.begin()->first==i){xd.insert(in.begin()->second);in.erase(in.begin());}if(xd.size()==2){auto now=xd.begin();int a=*now;now++;int b=*now;int ret=(s1[r[a]]-s1[l[a]-1])+(s1[r[b]]-s1[l[b]-1])+(s2[min(r[a],r[b])]-s2[max(l[a],l[b])-1]);inc=max(inc,ret);}}printf("%d\n",ans+inc);}return 0;
}

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

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

相关文章

快速搭建项目运行环境(JDK+Maven+Git+Docker+Mysql+Redis+Node.js+Nginx)+前后端项目分别部署

JDK ①、从oracle官方网站上下载1.8版本中的最新版的JDK https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html ②、把文件通过WinSCP或者XFTP上传到服务器上 ③、解压和配置环境变量 #进入安装包目录&#xff0c;解压 cd /data/tmp tar -zxvf jdk-8…

【AIGC】“光影交织的恋曲:绝美情侣在蓝天下的深情互动“

外貌特征 (Physical Appearance)&#xff1a;给远景镜头&#xff0c;这对情侣拥有出众的容貌和气质。男子身材挺拔&#xff0c;五官立体鲜明&#xff0c;阳光洒在他俊朗的脸庞上&#xff0c;更显英气逼人&#xff1b;女子则拥有一头柔顺亮丽的秀发&#xff0c;明亮的眼睛如同星…

代码随想录| 深搜、797.所有可能的路径

回溯算法其实就是深搜&#xff0c;只不过这里的深搜是侧重于在图上搜索&#xff0c;回溯大多是在树上搜索。 797.所有可能的路径 完成 代码 模板题 class Solution {List<List<Integer>> res new ArrayList<>();List<Integer> path new ArrayList…

GPT-4论文精读【论文精读·53】

Toolformer 今天我们来聊一下 GPT 4&#xff0c;但其实在最开始准备这期视频的时候&#xff0c;我是准备讲 Toolformer 这篇论文的&#xff0c;它是 Meta AI 在2月初的时候放出来的一篇论文。说这个大的语言模型可以利用工具了&#xff0c;比如说它就可以去调用各种各样的API&a…

腾讯云优惠券领取的三个渠道,一个比一个优惠!

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

Unity(第二十四部)UI

在游戏开发中&#xff0c;用户界面&#xff08;UI&#xff09;是至关重要的一部分。它负责与玩家进行交互&#xff0c;提供信息&#xff0c;并增强游戏的整体体验。Unity 提供了强大的工具和功能来创建和管理 UI。 ui的底层就是画布&#xff0c;创建画布的时候会同时创建一个事…

19.2 基于SpringBoot电商项目:一刷(❤❤❤❤)

19.2 基于SpringBoot电商项目一刷 1. 项目介绍2. 准备阶段2.1 idea插件2.2 log4j2日志整合1. 排除springweb依赖的Logback依赖2. 引入log4j2依赖3. log4j2.xml文件3. 用户模块3.1 统一响应对象1. 统一响应对象2. 异常信息枚举类3. 简单案例3.2 业务异常处理1. 自定义业务异常类…

python笔记_位运算

A&#xff0c;原码反码补码 1&#xff0c;二进制 二进制的最高位是符号位&#xff0c;0为正&#xff0c;1为负 例 3 > 0000 0011 -3 > 1000 0011 2&#xff0c;正数 正数的原码&#xff0c;反码&#xff0c;补码都一样&#xff08;三码合一&#xff09; 例 3 > 00…

docker 安装(一)

docker的安装 官方文档&#xff1a;https://docs.docker.com/manuals/ 卸载旧版 首先如果系统中已经存在旧的docker&#xff0c;则先卸载&#xff1a;yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \dock…

C++ STL标准程序库开发指南学习笔记

一、类模板简介&#xff1a; 在现今的C标准模板库中&#xff0c;几乎所有的东西都被设计为template形式&#xff0c;不支持模板&#xff0c;就无法使用标准程序库。模板库可以认为是针对一个或多个尚未明确的类型而编写一套函数或类型。模板是C的一个新特性。通过使用模板&…

【前端素材】推荐优质电商类后台管理系统网页Vuesax平台模板(附源码)

一、需求分析 在线后台管理系统是指供管理员或运营人员使用的Web应用程序&#xff0c;用于管理和监控网站、应用程序或系统的运行和数据。它通常包括一系列工具和功能&#xff0c;用于管理用户、内容、权限、数据等。下面是关于在线后台管理系统的详细分析&#xff1a; 1、功…

前端 css 实现标签的效果

效果如下图 直接上代码&#xff1a; <div class"label-child">NEW</div> // css样式 // 父元素 class .border-radius { position: relative; overflow: hidden; } .label-child { position: absolute; width: 150rpx; height: 27rpx; text-align: cente…

JavaScript中的this

在实际应用中&#xff0c;了解 this 的行为是非常重要的&#xff0c;特别是在编写库或框架时&#xff0c;或者当你需要在回调函数中访问特定的上下文时&#xff0c;通常推荐使用箭头函数或者其他方法来确保 this 的正确指向。 在ES6中&#xff0c;this 的值取决于它是如何被调用…

web服务器nginx下载及在win11的安装

一.背景 还是为了公司安排的师带徒任务。 操作系统版本&#xff1a;win11 家庭版 mginx版本&#xff1a;1.24.0 二.nginx版本选择与下载 我之前也写过下载nginx下载_ngnix stable 下载-CSDN博客 不想看寻找过程的&#xff0c;直接点这里去下载https://nginx.org/download…

Docker 使用原理流程

# docker 是如何来的&#xff1f; a. linux 内核本身支持容器技术&#xff0c;LXC (市面上有很多基于 LXC 开发的容器管理软件&#xff0c;如创建容器&#xff0c;查看容器&#xff0c;管理容器&#xff0c; docker 作为管理容器的一款代表工具软件) b. 容器的作用&#xff0c;…

利用python批量将.shp文件转换坐标生成.geojson文件,再将.geojson转换成.csv文件,最后将csv文件插入数据库表

第一步&#xff1a;.shp批量转.geojson # author: JMY # 创建时间: 2024/2/26 17:12 # 批量将.shp文件生成geojson文件并转换坐标为3857import os import geopandas as gpd# 定义输入和输出文件夹路径 input_folder shp文件 output_folder geojson文件# 定义输入和输出坐标系…

【王道操作系统】ch1计算机系统概述-04操作系统结构

文章目录 【王道操作系统】ch1计算机系统概述-04操作系统结构操作系统的内核操作系统的体系结构考纲新增内容&#xff08;红色为全新内容&#xff0c;黄色为原有内容&#xff09;&#xff1a;01 分层结构02 模块化03 宏内核&#xff08;大内核&#xff09;和微内核04 外核 【王…

redis03 八种数据类型

思维草图 String类型 字符串类型&#xff0c;是redis中最简单的存储类型&#xff0c;可以包含任何数据&#xff0c;例如jpg图片或者序列化的对象等&#xff0c;底层都是以字节数组形式存储&#xff0c;最大能存储512MB的数据。 常用命令 KEY命名规范 加前缀&#xff0c;分…

802.11局域网的 MAC 帧

目录 802.11 局域网的 MAC 帧 802.11 数据帧的三大部分 1.关于 802.11 数据帧的地址 最常用的两种情况 2.序号控制字段、持续期字段和帧控制字段 802.11 局域网的 MAC 帧 802.11 帧共有三种类型&#xff1a;控制帧、数据帧和管理帧。 802.11 数据帧的三大部分 MAC 首部&…

总结springboot启动jar,指定配置文件

第一&#xff1a;覆盖 -- 覆盖系统中的文件中的application-dev.yml文件&#xff0c;两种指定方法都可以 springboot默认优先读取application.properties>application.yml>指定文件(application-dev.yml) 公共配置可以在application.yml&#xff0c;其他配置在applicatio…