【HT-086-Div.2】嗡嗡蜜蜂

news/2025/11/14 19:46:48/文章来源:https://www.cnblogs.com/qwqSW/p/19223124

比赛传送门

更阅读体验的阅读体验

当时怎么就没想出来这个题呢,明明跟正解思路就差了一个左端点排序(我当时以为右端点排序呢)


我们枚举这 \(n\) 个区间,考虑当前某个区间 \(i\) 区间能取到的最大值。

对于两个区间来说,它们有三种位置关系:包含、相交、相离。我们分类讨论一下这三种情况下非共同活动范围的值。

1.两个区间相离

没什么好说的,由于不满足条件,所以它的贡献为 0。

2.两个区间相交

如图。

T1_1_1

我们考虑左半边的非共同活动范围,就是 \((l_2-1)-l_1+1=l_2-l_1\),右半边同理,是 \(r_2-(r_1+1)+1=r_2-r_1\)。两边加起来就是 \((l_2+r_2)-(l_1+r_1)\)

3.两个区间包含

如图。

T1_2_1

那这样的话,左半边的长度是 \((l_2-1)-l_1+1=l_2-l_1\),右半边的长度为 \(r_1-(r_2+1)-1=r_1-r_2\),两边加起来是 \((l_2-r_2)-(l_1-r_1)\)

但是后两种情况对 \(r_1\) 的取值是有要求的。或者说,一个 \([l_1,r_1]\) 能与 \([l_2,r_2]\) 产生合法解,当且仅当 \(r_1 \ge l_2\)\(l_1 \le l_2\)

第二个限制好满足,我们直接按左端点排序即可。

第一个限制的话,我们可以开两个线段树,每个线段树中的区间是一段连续的右端点下标(由于右端点太大,所以需要进行离散化)。

第一个线段树记录的是右端点下标在 \([L,R]\) 里的区间中,最小的 \(l+r\)。第二个线段树记录的是右端点下标在 \([L,R]\) 里的区间中,最小的 \(l-r\)

这样的话,考虑到第 \(i\) 个区间第二种情况时,我们就是要在第一棵线段树里找右端点下标在 \([l_i,r_i]\) 的最小的 \(l+r\);考虑第三种情况时,我们就是要在第二棵线段树里找右端点下标在 \([r_i,len]\) 的最小的 \(l-r\)

其中 \(len\) 为区间端点离散化完后的最大值。

考虑完第 \(i\) 个区间后,我们需要单点更新 \(r_i\) 处两棵线段树上的最小值。

剩下的内容就是写一棵单点修改区间取 \(\min\) 的线段树了。这个看代码。

时间复杂度 \(O(n \log n)\)

代码:

T1代码
#include<bits/stdc++.h>
#define int long long
#define ls (id<<1)
#define rs ((id<<1)|1)
using namespace std;inline int read(){int x=0,f=1;char c=getchar();while(c<48){if(c=='-') f=-1;c=getchar();}while(c>47) x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}const int N=2e5+6;
const int inf=1e16;
int n,qwq[2*N];
struct sw{int l,r;
}a[N];
struct seg{int l,r,mn;
}tr[2][8*N];inline bool cmp(sw x,sw y){return x.l<y.l;
}inline void pushup(int op,int id){tr[op][id].mn=min(tr[op][ls].mn,tr[op][rs].mn);
}inline void build(int op,int id,int l,int r){tr[op][id].l=l,tr[op][id].r=r;if(l==r){tr[op][id].mn=inf;return ;}int mid=(l+r)>>1;build(op,ls,l,mid);build(op,rs,mid+1,r);pushup(op,id);
}//单修最小值 
inline void update(int op,int id,int pos,int k){if(tr[op][id].l==tr[op][id].r){tr[op][id].mn=min(tr[op][id].mn,k);return ;}int mid=(tr[op][id].l+tr[op][id].r)>>1;if(pos<=mid) update(op,ls,pos,k);else update(op,rs,pos,k);pushup(op,id);
}//区查最小值 
inline int query(int op,int id,int l,int r){if(l<=tr[op][id].l&&tr[op][id].r<=r){return tr[op][id].mn;}int mid=(tr[op][id].l+tr[op][id].r)>>1,ans=inf;if(l<=mid) ans=min(ans,query(op,ls,l,r));if(r>mid) ans=min(ans,query(op,rs,l,r));return ans;
}signed main(){freopen("a.in","r",stdin);freopen("a.out","w",stdout);n=read();for(int i=1;i<=n;i++){a[i].l=read(),a[i].r=read();//qwq:离散化用的数组 qwq[2*i-1]=a[i].l,qwq[2*i]=a[i].r;}//左端点从小到大排序 sort(a+1,a+n+1,cmp);sort(qwq+1,qwq+2*n+1);//离散化 int len=unique(qwq+1,qwq+2*n+1)-qwq-1;for(int i=1;i<=n;i++){a[i].l=lower_bound(qwq+1,qwq+len+1,a[i].l)-qwq;a[i].r=lower_bound(qwq+1,qwq+len+1,a[i].r)-qwq;} build(0,1,1,len);build(1,1,1,len);//tr0:相交的情况 tr1:包含的情况 int ans=0;for(int i=1;i<=n;i++){//相交的情况 int x=query(0,1,a[i].l,a[i].r);ans=max(ans,qwq[a[i].l]+qwq[a[i].r]-x);//包含的情况 x=query(1,1,a[i].r,len);ans=max(ans,qwq[a[i].l]-qwq[a[i].r]-x);//不要忘记更新 update(0,1,a[i].r,qwq[a[i].l]+qwq[a[i].r]);update(1,1,a[i].r,qwq[a[i].l]-qwq[a[i].r]);}printf("%lld",ans);return 0;
}

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

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

相关文章

第四十一篇

今天是11月14号,上了形策

深入解析:Vue3 路由配置和使用与讲解(超级详细)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

好题集 (0) - 目录

之前的做题记录咕太多了,而且本身意义也不大。于是效仿 xak 同学搞了这个,用于记录少数做完之后觉得非常强势的题。 0x01 - LG P3978 [TJOI2015] 概率论:卡特兰数,排列组合 0x02 - LG p4550 收集邮票:期望 DP,大…

251114

251114缓慢欢快的节奏最为致命

HubSpot如何规模化推进AI编码助手应用

本文详细介绍了HubSpot工程团队如何从2023年开始实验GitHub Copilot,通过建立专门的AI团队、制定采用策略和衡量指标,最终实现AI编码工具在全公司的规模化应用,并分享了具体的技术实施方法和经验教训。上下文是关键…

好题集 (4) - CF487E Tourists

题目传送门。 概括一下题意:给定一简单无向联通图和每个点的点权,支持两种操作:修改某个点的点权,询问两点间所有简单路径上的点权最小值。 看到无向连通图和路径操作,首先联想到一个最容易的做法:建出圆方树,其…

完整教程:OpenHarmony内核基础:LiteOS-M内核与POSIX/CMSIS接口

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Http基础协议和解析 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年问题肌培训企业最新专业推测top5:技术创新与实战效能全面升级,做好皮肤管理,搞定皮肤亚健康、祛痘祛斑。

随着皮肤健康管理需求的持续增长,问题肌培训行业迎来爆发期。本榜单基于技术体系完整性、课程实战价值、服务覆盖能力三大核心维度,深度解析行业头部企业综合实力,为从业者选择培训合作伙伴提供权威参考。 # 2025年…

备份一点有趣的东西(期刊资源)

前言: 全球主要期刊平台概览 非常理解您想要收集和备份这些重要资源链接的需求!这确实是一个很好的学习习惯。 以下是上文讨论中提到的所有核心平台、期刊和资源的官方链接汇总,方便您一键收藏和备份。一、顶级学术…

常量指针 和 指针常量 - const pointer and pointer to const

常量指针 和 指针常量 - const pointer and pointer to constPosted on 2025-11-14 19:25 steve.z 阅读(0) 评论(0) 收藏 举报const pointer - const 指针 - 常量指针 - 指针本身是常量 - 指向不能变把指针本身定…

11.14模拟赛

T1 题目描述 一个长度为 \(n\) 的记账单,\(+\) 表示存入 \(1\) 元钱,\(-\) 表示取出 \(1\) 元钱。初始时账户上有 \(p\) 元钱,最终账户上恰好有 \(q\) 元钱。 现在发现记账单有问题,你要把记账单修改正确,使得:账户…

Swift 和 Tesseract OCR 进行验证码识别

一、背景介绍 Swift 是 Apple 生态中常用的编程语言,具有高性能和现代化特性。借助 Tesseract OCR,我们可以在 macOS 或 iOS 上快速进行验证码识别。 更多内容访问ttocr.com或联系1436423940 二、环境准备 2.1 安装 …

实用指南:云计算生态及学习方向和就业领域方向

实用指南:云计算生态及学习方向和就业领域方向2025-11-14 19:05 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display:…

2025年成绩差的孩子该用学习机吗?松鼠AI双线模式测评及选购指南

2025年成绩差的孩子该用学习机吗?松鼠AI双线模式测评及选购指南一、成绩差的孩子,更需要专业学习机 “学习机是智商税” 的偏见,源于对 “单一工具依赖” 的否定。实际上,成绩落后的孩子往往面临薄弱点模糊、练习无…

Python安装uiautomator2

UIAutomator2是一个可用于Android设备的U自动化测试的Python库,其底层基于谷歌官方提供的Ul Automator,可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作。与谷歌原生的Ul Automator不同的是,UIAu…

用【WPF+Dlib68】实现 侧脸 眼镜虚拟佩戴 - 用平面图表现空间视觉 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CF 1844G Tree Weights

高妙想法,常数项观察真无敌了高妙题目。 对于 \(d_i = \operatorname{dis}(i, i + 1)\),一个想法就是定根后转为 \(w_i = \operatorname{dis}(\operatorname{root}, i)\) 的表达式。 不妨令 \(\operatorname{root} =…

Vue3边学边做系列(5)--布局切换菜单事件标签页 - 实践

Vue3边学边做系列(5)--布局切换&菜单事件&标签页 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

2025年11月徐州网站开发服务商怎么选

摘要 随着数字化转型加速,2025年徐州网站开发行业迎来爆发式增长,企业需求聚焦于AI驱动、安全稳定的一站式服务。本文基于行业数据和用户反馈,为您解析如何选择靠谱的服务商,并提供2025年11月徐州网站开发服务商排…