HPU personal training
K - Two Contests
原题链接:https://agc040.contest.atcoder.jp/tasks/agc040_b?lang=en
题目大意:
给一个区间集合,将这些区间分为两个集合,求两个区间中线段交集的最大值。
解题思路:
首先找到这些区间的右端点在最左端的区间p,左端点在最右端的区间q。
- 如果p,q在同一个集合中,那么这个集合的最大交集就是p_r - q_l,而另一个只放一个最大的区间,得到ans1。
- 如果不在同一个区间,想一下集合区间的特征,含有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的更多相关文章
- [EOJ Monthly2019.11][T4]安全带
以下是题干 D. 安全带 单点时限: 1.0 sec 内存限制: 256 MB (前面题干是一堆废话,我把它删了) 简单来说:初始给出一个 n 个点顺次连接而成的环,点有点权,边权是两个端点的点权乘积 ...
- [EOJ Monthly2019.11][T1]纸条
https://acm.ecnu.edu.cn/ 华东师范大学在线评测网站 今天这个题目来自华东师范大学的校赛,比icpc稍难一些,在2019年11月29日周五19:30开始,持续2.5个小时 以下是 ...
- (转)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 ...
- 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 ...
- 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 ...
- 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) ...
- 2016 Multi-University Training Contests
2016 Multi-University Training Contest 1 2016 Multi-University Training Contest 2 2016 Multi-Univers ...
- 2016 Multi-University Training Contest 2 D. Differencia
Differencia Time Limit: 10000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- 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) ...
随机推荐
- (一)VS2015下配置OpenGL
刚开始用OpenGL,一开始不太明白配置库的原理,在VS2015下耗费了大量时间.这里将配置过程做个笔记,以供日后查看.配置过程中,需要下载cmake构建工具以及glew和glfw库. 下载地址为: ...
- ubuntu server安装的一些坑
[没有root用户] ubuntu server安装的时候要你新建一个用户,安装完成后,你需要手动开启root. $ sudo passwd root 输入你当前用户的密码 输入你希望的root用户的 ...
- 记一次有趣的JsonFormat不生效问题
dto中使用了JsonFormat注解,如图 然后再序列化时 objectMapper.writeValueAsString(printReceBillVO) 始终值是一个Long,最后发现是包引用错 ...
- IDEA导入Junit jar包,在JavaSE的Module中使用Junit测试
写代码时偶尔想试一下自己的小想法,于是在IDEA中建了一个JavaEE项目.JavaEE项目中只能在main方法中运行代码块,不如单元测试的@Test灵活. 于是在网上找到了Junit的jar包:Do ...
- QT linux下显示中文的问题
如果中文显示为乱码,那么是字符集不对. 应该设置字符集: QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK") ...
- 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)
洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...
- neo4j 初探
neo4j 初探 参考 转载:http://shomy.top/2018/06/08/neo4j-start/ 近期需要处理图数据,考察后打算使用neo4j, 相比其他一些图数据库,neo4j开源,跨 ...
- Linux 下安装中文字体
本文以安装黑体为例,简单演示如何在Linux下安装中文字体. 环境信息介绍 [root@thatsit ~]# cat /etc/redhat-release CentOS Linux release ...
- qt03 QString和QByteArray相互转换
QString str("hello"); QByteArray bytes = str.toUtf8(); // QString转QByteArray方法1 QS ...
- 格式化你的git message
https://github.com/angular/angular.js/blob/f3377da6a748007c11fde090890ee58fae4cefa5/CONTRIBUTING.md# ...