【问题描述】
给定 N 个区间, 要求选出若干个区间 A1, A2, A3... Am (m > 1), 使得:
|A1∩A2∩A3...∩Am| * |A1∪A2∪A3...∪Am|
最大。
【输入格式】
第一行一个整数 N
接下来 N 行,每行 2 个整数 L, R, 描述一个区间。
【输出格式】
一个数, 为该式最大值。
【输入样例】
4
1 6
4 8
2 7
3 5
【输出样例】
24
【样例解释】
选(1, 6)和(2, 7)
【数据范围】
30% N≤1000
100% N≤1000000
100% L,R≤10 6

首先m=2即可取到最优解(一定).
对区间按左端点第一关键字, 右端点第二关键字排序.
维护一个单调栈. 栈内区间的长度单调递减.
每次退栈头时, 用栈头和压退栈头的区间更新答案. 
压入栈头的时候用原栈头和新栈头更新.

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Interval
{
long long l,r;
}a[];
int q[],n;
long long ans;
bool cmp(Interval a,Interval b)
{
return (a.l<b.l||(a.l==b.l&&a.r<b.r));
}
long long count(int x,int y)
{
if (y==) return ;
return (min(a[x].r,a[y].r)-max(a[x].l,a[y].l))*(max(a[x].r,a[y].r)-min(a[x].l,a[y].l));
}
int main()
{int i,j,tail=;
cin>>n;
for (i=;i<=n;i++)
{
scanf("%lld%lld",&a[i].l,&a[i].r);
}
sort(a+,a+n+,cmp);
for (i=;i<=n;i++)
{
while (tail&&a[q[tail]].r-a[q[tail]].l<=a[i].r-a[i].l)
{
ans=max(ans,count(i,q[tail]));
tail--;
}
tail++;
ans=max(ans,count(i,q[tail-]));
q[tail]=i;
}
cout<<ans;
}

区间(interval)的更多相关文章

  1. 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?

    牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...

  2. 牛客小白月赛5 I 区间 (interval) 【前缀和】

    链接:https://www.nowcoder.com/acm/contest/135/I 题目描述 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次 ...

  3. [LeetCode] Data Stream as Disjoint Intervals 分离区间的数据流

    Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers seen ...

  4. [LeetCode] 352. Data Stream as Disjoint Intervals 分离区间的数据流

    Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers seen ...

  5. Ceph源码解析:PG peering

    集群中的设备异常(异常OSD的添加删除操作),会导致PG的各个副本间出现数据的不一致现象,这时就需要进行数据的恢复,让所有的副本都达到一致的状态. 一.OSD的故障和处理办法: 1. OSD的故障种类 ...

  6. SQLserver 获取当前时间

    1. 获取当前日期 select GETDATE() 格式化: select CONVERT(varchar,GETDATE(),120) --2017-05-12 16:33:10 2. 获取当前年 ...

  7. echarts 技巧自己的一些记录

    1.不要输出 window["echarts"].init(chart) ,会卡死. let chart = document.getElementById("chart ...

  8. LeetCode: Merge Intervals 解题报告

    Merge IntervalsGiven a collection of intervals, merge all overlapping intervals. For example,Given [ ...

  9. sql获取时间、年龄

      mysql数据库获取年龄:TIMESTAMPDIFF(YEAR, [出生日期字段], CURDATE()) select * from (select name 姓名,TIMESTAMPDIFF( ...

随机推荐

  1. Linux下进程间通信--共享内存:最快的进程间通信方式

    共享内存: 一.概念: 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式.两个不同进程A.B共享内存的意思是,同一块物理内存被映射到进程A.B各自的进程地址空间. 进程A可以即时看到进程B ...

  2. Linux安装mongodb总结

    由于自己的博客上线部署时需要用到mongodb来存储图片文件,所以先在本地电脑上安装了mongodb做测试,由于之前没接触过mongodb,所以安装过程中遇到了各种小问题,折腾了好久终于安装好并成功启 ...

  3. 为微软samples-for-ai贡献代码是种怎么样的体验?

    推送原文链接:传送门 关注SomedayWill,了解为微软项目贡献代码的始终. 还记得微软神器samples-for-ai吗?它可不仅仅可以用来安装框架,它其实是个开源的AI样例库,以Visual ...

  4. Project facet is Java version 1.7 is not spported

    在移植eclipse项目时,如果遇到 "Project facet Java version 1.7 is not supported." 项目中的jdk1.7不支持.说明项目是其 ...

  5. Visual Studio 开发工具常用的插件

    转载自落日故乡  http://www.spersky.com/post/vsPlugins.html 该博客中收集整理归纳了若干个常用的vs插件,比如高亮显示当前选择,垂直辅助线,折叠代码等等,具体 ...

  6. vue 保留两位小数 不能直接用toFixed(2) ?

    用vue做项目的时候多多少少都会遇到这个问题 刚开始我是用toFixed()这个方法来写的  效果是有的 但是控制台一直是红红的围绕着我 突然想到 vue和jquery混搭 的 问题 于是乎 看了一下 ...

  7. jQuery兼容浏览器IE8方法

    在维护公司网站的时候,发现在IE8下jquery会报对象不支持此属性或方法.缺少对象的错误:  在其他浏览器就可以正常运行,当前使用的jquery版本是3.1.1,查资料发现jquery从2.0开始不 ...

  8. java实现两个int数交换

    普通方法,进阶方法,大神方法 @Test public void test3(){ int m = 5; int n = 12; //要求m和n交换位置 System.out.println(&quo ...

  9. Django实现 省 市 县 自关联的下拉级联

    前端部分: 三个下拉拉菜单进行级联 <body> <select id="province" > <option value="" ...

  10. RxJava系列2(基本概念及使用介绍)

    RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...