传送门

一看就感觉很贪心

考虑左端点最右的区间 $p$ 和右端点最左的区间 $q$

如果 $p,q$ 属于同一个集合(设为 $S$,另一个集合设为 $T$),那么其他的区间不管是不是在 $S$ 都不会影响 $S$ 的交集大小

那么为了最优显然我们只要留一个最长的区间给 $T$ ,然后其他全给 $S$

代码实现的时候枚举不属于 ${p,q}$ 的最长区间时也可以考虑 $p,q$ 的区间长度,并不影响答案

然后考虑 $p,q$ 不属于同一个集合的情况,不妨设 $p$ 在 $S$ , $q$ 在 $T$

设第 $i$ 个区间的左端点为 $L[i]$,右端点为 $R[i]$

那么答案为 $max(0,min_{i \in S} (R[i]) -L[p])+max(0,R[q]-max_{i \in T}(L[i]))$

现在问题就是求这个式子的最大值

把区间按 $L$ 排序,枚举 $k$ ,把前 $k$ 名的区间给 $T$ ,剩下给 $S$

这样即可保证枚举到式子 $max(0,R[q]-max_{i \in T}(L[i]))$ 中的 $max_{i \in T}(L[i])$ 的所有情况

具体维护的话就预处理前缀后缀 $min,max$ 即可

代码实现的时候同样可以不用强制 $p,q$ 不属于同一个集合,因为不影响答案

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=2e5+,INF=1e9;
int n,ans;
struct dat {
int l,r;
dat (int _l=,int _r=) { l=_l,r=_r; }
inline bool operator < (const dat &tmp) const {
return l!=tmp.l ? l<tmp.l : r<tmp.r;
}
}d[N];
int lx[N],rx[N],ly[N],ry[N];
int main()
{
n=read();
for(int i=;i<=n;i++)
d[i].l=read(),d[i].r=read();
sort(d+,d+n+);
lx[]=d[].l,rx[]=d[].r;
for(int i=;i<=n;i++)
{
lx[i]=max(lx[i-],d[i].l);
rx[i]=min(rx[i-],d[i].r);
}
ly[n]=d[n].l; ry[n]=d[n].r;
for(int i=n-;i>=;i--)
{
ly[i]=max(ly[i+],d[i].l);
ry[i]=min(ry[i+],d[i].r);
}
for(int i=;i<n;i++)
ans=max(ans,max(,rx[i]-lx[i]+)+max(,ry[i+]-ly[i+]+));
for(int i=;i<=n;i++)
ans=max(ans,d[i].r-d[i].l++max( , min(ry[i+],rx[i-])-max(ly[i+],lx[i-])+ ));
printf("%d\n",ans);
return ;
}

AtCoder Grand Contest 040 B - Two Contests的更多相关文章

  1. 【AtCoder】AtCoder Grand Contest 040 解题报告

    点此进入比赛 \(A\):><(点此看题面) 大致题意: 给你一个长度为\(n-1\).由\(<\)和\(>\)组成的的字符串,第\(i\)位的字符表示第\(i\)个数和第\( ...

  2. AtCoder Grand Contest 040

    Preface 今年准备省选啥都不说了,省选题基本上都做过一遍了,开始尝试板刷AGC 这场做完就从AGC001开始吧,感觉以我的速度和来机房的频率一个礼拜做一场都谢天谢地了 A - >< ...

  3. AtCoder Grand Contest 040 简要题解

    从这里开始 比赛目录 A < B < E < D < C = F,心情简单.jpg. Problem A >< 把峰谷都设成 0. Code #include &l ...

  4. AtCoder Grand Contest 040 C - Neither AB nor BA

    传送门 好妙的题啊 首先容易想到简单容斥,统计合法方案数可以考虑总方案数减去不合法方案数 那么先考虑如何判断一个串是否合法,但是直接判断好像很不好搞 这时候就需要一些 $magic$ 了,把所有位置下 ...

  5. AtCoder Grand Contest 040 A - ><

    传送门 对于某个位置,只要知道这个位置往左最多的连续 $\text{<}$ 的数量 $x$ 和往右最多的连续 $\text{>}$ 的数量 $y$ 那么这个位置最小可能的数即为 $max( ...

  6. AtCoder Grand Contest 012

    AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...

  7. AtCoder Grand Contest 011

    AtCoder Grand Contest 011 upd:这篇咕了好久,前面几题是三周以前写的... AtCoder Grand Contest 011 A - Airport Bus 翻译 有\( ...

  8. AtCoder Grand Contest 031 简要题解

    AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...

  9. AtCoder Grand Contest 010

    AtCoder Grand Contest 010 A - Addition 翻译 黑板上写了\(n\)个正整数,每次会擦去两个奇偶性相同的数,然后把他们的和写会到黑板上,问最终能否只剩下一个数. 题 ...

随机推荐

  1. Java核心复习—— volatile 与可见性

    一.介绍 volatile保证共享变量的"可见性".可见性指的是当一个线程修改变量时,另一个线程能读到这个修改的值. 这里就要提出几个问题. 问题1:为什么一个线程修改时,另一个线 ...

  2. javaSE集合---进度2

    一.集合框架 1.特点 对象封装数据,对象多了也需要存储,集合用于存储对象. 对象的个数确定可以使用数组,但是不确定的话,可以用集合,因为集合是可变长度的. 2.集合和数组的区别 数组是固定长度的,集 ...

  3. Git如何永久删除某个重要文件文件或文件夹 (包括历史记录) 强制

    有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的), 而且上传的文件又特别大的时候, 这将导致别人clone你的代码或下载zip包的时候也必 ...

  4. insmod某个内核模块时提示“Failed to find the folder holding the modules”如何处理?

    答: 创建/lib/modules/$(uname -r)目录,命令如下: mkdir /lib/modules/$(uname -r)

  5. Android:Mstar平台 HDMI OUT 静音流程

    一.framework层 1. APP调用 AudioManager 的 adjustStreamVolume() 接口实现在: frameworks\base\services\core\java\ ...

  6. springboot 之JPA

    1.添加pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  7. linux简单命令1

    1:-rw-r--r-- 第一位"-"表示文件类型("-"文件,"d"表示目录,"|"软连接,相当win7的快捷方式) ...

  8. 一百三十九:CMS系统之首页帖子列表布局

    # 配置ueditor上传文件到七牛UEDITOR_UPLOAD_TO_QINIU = True # 设置为True是,视为开始把图片传到七牛储存,本地不储存UEDITOR_QINIU_ACCESS_ ...

  9. css3 animation 点亮灯光效果

    <style> .wrap .bulb { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50% ...

  10. Python(1)自动发送邮件

    python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email模块主要负责构造邮件. sm ...