K - Two Contests

原题链接:https://agc040.contest.atcoder.jp/tasks/agc040_b?lang=en

题目大意:

给一个区间集合,将这些区间分为两个集合,求两个区间中线段交集的最大值。

解题思路:

首先找到这些区间的右端点在最左端的区间p,左端点在最右端的区间q。

  1. 如果p,q在同一个集合中,那么这个集合的最大交集就是p_r - q_l,而另一个只放一个最大的区间,得到ans1。
  2. 如果不在同一个区间,想一下集合区间的特征,含有p的集合S中,区间的右端点都大于p的右端点,那么他们的最大交集就是p_R - min_L{ L属于集合S} + 1,含有q的集合T中,区间的左端点都小于q的左端点,那么他们的最大交集就是min_R{R属于集合T} - q_l + 1.可以知道如果直接从所有集合中找最合适期间,那么找到的这个区间可能既在S集合中又在T集合中,所以不能这样找。因此要用到后缀最小值。首先对于每一个区间存储R-mxl+1和mnR-L+1两个数据。然后按其中一个数据对数组排列大小,(要从大的开始,因为大的在一个集合中,所有比他小的都在另一个集合中,然后从大到小找两个集合中的最小交集,这样就可以用后缀最小值了。)

代码:

 #include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + ;
struct aa{
int first,second;
}P;
aa arr[N];//记录区间
int minnore[N];
aa S[N]; bool cmp1(aa a, aa b){
return a.first > b.first;
} int main(){
int q, L, R, mxL = , mnR = 1e9 + , RR, LL;
int flag1 = , flag2 = , maxlen = ;
scanf("%d", &q);
for(int i = ; i < q; i ++ ){
scanf("%d%d", &L, &R);
arr[i].first = L;
arr[i].second = R;
if(L > mxL){
mxL = L;
RR = R;
flag1 = i;
}
if(R < mnR){
mnR = R;
LL = L;
flag2 = i;
}
maxlen = max(maxlen, R - L + );
}
int ans1 = maxlen;
if(mnR >= mxL) ans1 += mnR - mxL + ;
if(flag1 == flag2){
cout << ans1 << endl;
return ;
}
for(int i = ; i < q; i ++ ){
S[i].first = max(arr[i].second - mxL + , );
S[i].second = max(mnR - arr[i].first + , );
}
sort(S, S + q, cmp1);
minnore[q-] = S[q - ].second;
for(int i = q - ; i >= ; i --){
minnore[i] = min(minnore[i + ], S[i].second);
}
int ans2 = ;
for(int i = ; i < q; i ++ ){
ans2 = max(ans2, S[i].first + minnore[i+]);
}
cout << max(ans2,ans1) <<endl;
return ;
}

HPU personal training的更多相关文章

  1. [EOJ Monthly2019.11][T4]安全带

    以下是题干 D. 安全带 单点时限: 1.0 sec 内存限制: 256 MB (前面题干是一堆废话,我把它删了) 简单来说:初始给出一个 n 个点顺次连接而成的环,点有点权,边权是两个端点的点权乘积 ...

  2. [EOJ Monthly2019.11][T1]纸条

    https://acm.ecnu.edu.cn/ 华东师范大学在线评测网站 今天这个题目来自华东师范大学的校赛,比icpc稍难一些,在2019年11月29日周五19:30开始,持续2.5个小时 以下是 ...

  3. (转)A Recipe for Training Neural Networks

    A Recipe for Training Neural Networks Andrej Karpathy blog  2019-04-27 09:37:05 This blog is copied ...

  4. Method and apparatus for training a memory signal via an error signal of a memory

    Described herein is a method and an apparatus for training a memory signal via an error signal of a ...

  5. Bug Bash in Personal Photo Experience 1/11/2016

    In the process of our Personal Photo Experience Project, There are some bugs which hinder our forwar ...

  6. hdu 4946 2014 Multi-University Training Contest 8

    Area of Mushroom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  7. 2016 Multi-University Training Contests

    2016 Multi-University Training Contest 1 2016 Multi-University Training Contest 2 2016 Multi-Univers ...

  8. 2016 Multi-University Training Contest 2 D. Differencia

    Differencia Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  9. 2016 Multi-University Training Contest 1 G. Rigid Frameworks

    Rigid Frameworks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

随机推荐

  1. Python中文件读写之 w+ 与 r+ 到底有啥区别?

    其实r 是只读,只能读不能写,这是很明确的,但是r+是可读写,变成r+后还没太明白到底加了什么,还是照样写不了,有没有这样的体验呢,如下代码,只读时 f = open("test.txt&q ...

  2. python+selenium模拟鼠标操作

    from selenium.webdriver.common.action_chains import ActionChains #导入鼠标相关的包 ------------------------- ...

  3. Dapper基本使用

    http://www.cnblogs.com/Sinte-Beuve/p/4231053.html

  4. A+B and A*B problem 大数相加 相乘 模拟

    A+B and A*B problem 大数相加 相乘 模拟 题意 给你两个数a和b,这两个数很大,然后输出这两个数相加的和,相乘的积. 解题思路 模拟,但是还是搜了搜代码实现,发现这个大佬写的是真的 ...

  5. 工作笔记之:如何在eclipse安装CVS插件?找了很久的,自己总结一下

    (1)在主目录里“help”→Install New Software.....→The Eclipse Project Updates - http://download.eclipse.org/e ...

  6. elementUI 等 UI框架中,@change方法传递参数

      有些业务中,在使用 @change 回调的时候需要动态获取当前循环下的特定值,但是@change方法一旦传递参数就会覆盖原本的数据,对此,有两种方法解决: // 这种方法据说会改变 this 指向 ...

  7. AFNetworking2.0源码解析<四>

    结构 AFURLResponseSerialization负责解析网络返回数据,检查数据是否合法,把NSData数据转成相应的对象,内置的转换器有json,xml,plist,image,用户可以很方 ...

  8. new/delete、malloc/free 的区别

    相同点 1.都可以动态的申请或释放内存 2.存储方式相同,动态申请的内存都存放在堆中,无法自动释放,要调用对应的delete和free   区别 1.new能自行的计算需要分配的空间,malloc需要 ...

  9. netlink, PF_NETLINK - 内核与用户之间的通讯

    SYNOPSIS 总揽 #include <asm/types.h> #include <sys/socket.h> #include <linux/netlink.h& ...

  10. 使nginx归于systemd管理

    [root@centos7 ~]# vim /usr/lib/systemd/system/nginx.service [Unit] Description=The Nginx HTTP Server ...