首页 > 其他分享 >CF1884C Medium Design

CF1884C Medium Design

时间:2023-10-23 14:12:10浏览次数:37  
标签:Medium CF1884C 线段 最小值 那么 Design 答案 区间 最大值

思路

Step1. 贪心

拿到题后,第一时间想到贪心,如果这个区间加上会使答案变小或不变就不加。

但是很显然,这个贪心是错误的。

如果答案的最大值在区间 B,但是先加了区间 A,导致加区间 B 使答案不变,那么这样就会使答案变劣。

所以贪心是错误的。

Step2. 枚举

接着,想到了可以枚举最小值,如果某个区间包含了这个最小值,那么这个区间加上后的答案一定是不优于不加上这个区间的答案,所以所有包含了这个最小值的区间都不需要加,那么再把所有最小值的答案取个最大值即可。

当然了,区间的值大,所以需要离散化。

有个巨佬朋友写过这种做法的题解

这里就不赘述了。

Step3. 优化

事实上,最小值的选择的讨论是多余的,假设最小值选在 \(x\) 点,那么所有横跨 \(x\) 的区间都是无效的,那么可以对答案做出贡献的只有两个端点都在 \(x\) 左侧或者都在右侧的区间才有用,那么假设最后的最大值在 \(x\) 左侧,那么在 \(x\) 右侧的区间无用,这样的话,把 \(x\) 右移可以让区间变多或不变,那么答案将会变优或者不变,同理最大值在 \(x\) 右侧也可以得到 \(x\) 在左端点不劣。

总而言之就是,如果 \(x\) 选在中间,那么答案一定不优于 \(x\) 选择两端的情况。

所以我们只需要讨论两种情况即可。

所以如果一个区间左端点有 \(1\) 的话,就把这个区间加给第一组线段树。

如果一个区间右端点有 \(m\) 的话,就把这个区间加给第二组线段树。

注意:一个区间可以加给两个线段树。

那么最后的答案就是两组线段树维护的最大值的较大值。

同样地,需要离散化。

AC code

#include<bits/stdc++.h>
using namespace std;
struct segtree
{
	struct node{int l,r,maxn,tag;}t[800005];
	inline void pushup(int p){t[p].maxn=max(t[p<<1].maxn,t[p<<1|1].maxn);}
	inline void addtag(int p,int k){t[p].maxn+=k,t[p].tag+=k;}
	inline void pushdown(int p){addtag(p<<1,t[p].tag),addtag(p<<1|1,t[p].tag),t[p].tag=0;}
	void build(int p,int l,int r)
	{
		t[p].l=l,t[p].r=r,t[p].maxn=t[p].tag=0;
		if(l==r) return;
		int mid=l+r>>1;
		build(p<<1,l,mid),build(p<<1|1,mid+1,r);
	}
	void update(int p,int l,int r)
	{
		if(t[p].l>=l&&t[p].r<=r){addtag(p,1);return;}
		if(t[p].tag) pushdown(p);
		int mid=t[p].l+t[p].r>>1;
		if(mid>=l) update(p<<1,l,r);
		if(mid<r) update(p<<1|1,l,r);
		pushup(p);
	}
}t1,t2;
int T,n,m,l[200005],r[200005],a[400005],num;
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;++i) scanf("%d%d",&l[i],&r[i]),a[i*2-1]=l[i],a[i*2]=r[i];a[n*2+1]=1,a[n*2+2]=m;
		sort(a+1,a+2*n+3),num=unique(a+1,a+2*n+3)-a-1;
		t1.build(1,1,num),t2.build(1,1,num);
		//cout<<num<<endl;
		for(int i=1;i<=n;++i)
		{
			l[i]=lower_bound(a+1,a+num+1,l[i])-a,r[i]=lower_bound(a+1,a+num+1,r[i])-a;
			if(l[i]!=1) t1.update(1,l[i],r[i]);
			if(r[i]!=num) t2.update(1,l[i],r[i]);
		}
		printf("%d\n",max(t1.t[1].maxn,t2.t[1].maxn));
	}
	return 0;
}

Step4. 进一步优化

可以发现,只需要区间修改和一次区间查询,所以实际上可以直接使用差分数组进行维护,如果不算上离散化要用到的排序的话,时间复杂度更优,代码也更简单。

主要是因为前面的方法需要线段树,所以最开始没想到差分,辛辛苦苦写完了才发现更本不需要。

因为代码难度低,所以这里就不放差分版的代码了 (绝对不是我懒得再写一个差分了)

标签:Medium,CF1884C,线段,最小值,那么,Design,答案,区间,最大值
From: https://www.cnblogs.com/One-JuRuo/p/17782264.html

相关文章

  • Altium Designer 2017「AD 17」精简汉化版下载附安装激活步骤
    AltiumDesigner17(简称AD17)是一款专业的PCB电路设计软件,新版带来了大量实用更新和增强,如全新的PCB布线及增强技术、动态铺铜、自动交叉搜索等等。设计者能够运用该版本中提供的诸多全新功能,将自己从干扰设计工作的琐碎任务中解放出来,从而完全专注于设计本身,尽情享受创新激情。软......
  • Adobe InDesign CC2021 for Mac「ID」汉化版 一键安装 永久使用
    AdobeInDesign2021中文直装版是专业的版面设计和桌面出版软件,使用旨在为用户提供设计、预检、发布等一体化的功能,为宣传册、海报以及其他印刷或数字媒体制作完美的布局。软件地址:看置顶贴AdobeInDesign2021Mac版的软件亮点:1、设计任何材料:信笺,传单,海报,小册子,年度报告,杂志和书......
  • DVWA CSRF medium
    一、DVWACSRFmedium代码分析if(stripos($_SERVER['HTTP_REFERER'],$_SERVER['SERVER_NAME'])!==false){...}medium添加了对httpreferer头的判断,但只是简单的判断。只要httpreferer头里包服务器域名就可以了。二、实现步骤1、把DVWA部署在127.0.0......
  • 使用 Ant Design Vue 你可能会遇到的14个问题
    公司有一个新需求,在原来项目基础上开发,项目中使用AntDesignVue,版本是1.X,在此记录下遇到的问题;对于没有使用过或者使用程度不深的同学来说,希望可以帮助你在开发中遇到问题时有个参考。对于已经熟练使用的同学,可能这些问题都遇到过,欢迎大家在评论区补充。1、实现对下拉框显示......
  • uniCloud cms 自媒体资讯新闻文章应用系统 uniapp+uniCloud+AntDesignVue Life cms
    介绍LifeCMS是uniCloud+uni-app云端一体全套CMS/自媒体/资讯/新闻/文章应用系统,前台包含注册、登录(账号密码登录、短信登录、微信手机号快捷登录、微信一键登录、App手机一键登录、Apple登录)、文章列表、文章详情、搜索、广告、分享、评论、回复、点赞、收藏、用户中心、意见......
  • [转] VSCode中 Vetur插件排版Vue文件 Col 标签子标签不被缩进的问题 iview viewDesign
    [转]VSCode中Vetur插件排版Vue文件Col标签子标签不被缩进的问题iviewviewDesign自动格式化问题Col标签不对齐首先直接放解决办法在vsCodesettings.json中添加{//缩进大小,自行按需配置"vetur.format.options.tabSize":4,"vetur.format.defaultFo......
  • Vivado生成bitstream时报错[Opt 31-67] Problem: A LUT3 cell in the design is missi
    这个原因主要是因为有一个引脚没有用到,解决方法。1、打开Schematic。2、根据提示的模块去找,比如说我的报错。[Opt31-67]Problem:ALUT3cellinthedesignismissingaconnectiononinputpinI1,whichisusedbytheLUTequation.Thispinhaseitherbeenleftun......
  • Ant Design中表单验证输入框默认值initialValue不更改值会验证不通过(react)
    AntDesign中表单验证输入框默认值initialValue不更改值会验证不通过(react)更改前<Form.Itemlabel="用户标识"name="id"rules={[{required:true,message:'用户标识不能为空!',},]}......
  • Adobe InDesign 2023 下载安装及永久激活教程!
    软件介绍:AdobeInDesign是Adobe公司的一个桌面出版(DTP)应用程序,主要用于各种印刷品的排版编辑。该软件是直接针对其竞争对手QuarkXPress而发布的。虽然最初在争取用户方面面临了一些困难,但在2002年发布了MacOSX版本后开始赶超其竞争对手。 安装和使用教程:1.通过文章末尾处下载......
  • hackthebox agile medium
    信息收集portscanningsudonmap--sT--min-rate10000-p-10.10.11.203-oAnmap/agilesudonmap-sT-sC-sV-pxx10.10.11.203-oAnmap/detialbannertellsusit'sanubuntuserverwealsoaddthatdomainto/etc/hostsfile->10.10.11.203superp......