区间(interval)
【问题描述】
给定 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)的更多相关文章
- 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?
牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...
- 牛客小白月赛5 I 区间 (interval) 【前缀和】
链接:https://www.nowcoder.com/acm/contest/135/I 题目描述 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次 ...
- [LeetCode] Data Stream as Disjoint Intervals 分离区间的数据流
Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers seen ...
- [LeetCode] 352. Data Stream as Disjoint Intervals 分离区间的数据流
Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers seen ...
- Ceph源码解析:PG peering
集群中的设备异常(异常OSD的添加删除操作),会导致PG的各个副本间出现数据的不一致现象,这时就需要进行数据的恢复,让所有的副本都达到一致的状态. 一.OSD的故障和处理办法: 1. OSD的故障种类 ...
- SQLserver 获取当前时间
1. 获取当前日期 select GETDATE() 格式化: select CONVERT(varchar,GETDATE(),120) --2017-05-12 16:33:10 2. 获取当前年 ...
- echarts 技巧自己的一些记录
1.不要输出 window["echarts"].init(chart) ,会卡死. let chart = document.getElementById("chart ...
- LeetCode: Merge Intervals 解题报告
Merge IntervalsGiven a collection of intervals, merge all overlapping intervals. For example,Given [ ...
- sql获取时间、年龄
mysql数据库获取年龄:TIMESTAMPDIFF(YEAR, [出生日期字段], CURDATE()) select * from (select name 姓名,TIMESTAMPDIFF( ...
随机推荐
- 第1次作业:no blog no fun
1.先回答老师的问题 第一部分:结缘计算机 读了进入2012 -- 回顾我走过的编程之路后,我试着回顾了我的编程生涯的开始.我最原始的记忆就是老爸教我用电脑玩连连看,那时候的显示器应该是C ...
- Alpha冲刺No.3
冲刺Day3 一.站立式会议 终于我们遇到了我们最艰难的时候,组员也反映每天做的事情越来越少,出现了问题越来越多. 人太少,时间太少,我们没有办法一个人花足够多的时间去钻研统一个问题,或许是所以组员的 ...
- 2018c语言第1次作业
6-1 计算两数的和与差 1.设计思路 (1)主要描述题目算法 第一步:把两个数的加减法分别赋给psum和pdiff. 第二步:通过psum和pdiff的地址把值传回主函数. (2)流程图.(无) 2 ...
- Mysql数据库的触发程序
/** **创建表 */ CREATE TABLE test1(a1 INT); CREATE TABLE test2(a2 INT); CREATE TABLE test3(a3 INT NOT N ...
- 怎么去理解JAVA中类与对象的关系
首先要明确,在现实生活中,每一个物体都有自己的基本特征,专业一点也可以说成是属性有些甚至还有一定的行为.例如 汽车的特征:有车门.有轮胎.颜色各一等等,行为:有行驶,开车门,开车灯,等等.有这些属性和 ...
- JSONP 详解
1.什么是JSONP ? JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实 ...
- thinkphp框架的大D方法应用
大D方法中需要传递一个模型,比如UserModer,就传递D('User'),而数据库中存在一个表比如think_user,其中think就是前缀. 在UserModel里面存在自动验证.自动完成可以 ...
- LeetCode & Q28-Implement strStr-Easy
String Two Pointers Description: Implement strStr(). Returns the index of the first occurrence of ne ...
- LeetCode & Q66-Plus One-Easy
Array Description: Given a non-negative integer represented as a non-empty array of digits, plus one ...
- Spark入门(1-4)安装、运行Spark
如何安装Spark 安装和使用Spark有几种不同方式.你可以在自己的电脑上将Spark作为一个独立的框架安装或者从诸如Cloudera,HortonWorks或MapR之类的供应商处获取一个Spar ...