BZOJ_2369_区间_决策单调性

Description

对于一个区间集合
{A1,A2……Ak}(K>1,Ai不等于Aj(i不等于J),定义其权值
 
S=|A1∪A2∪……AK|*|A1∩A2……∩Ak|
即它们的交区间的长度乘上它们并区间的长度。
显然,如果这些区间没有交集则权值为0。
Your Task
给定你若干互不相等的区间,选出若干区间使其权值最大。

Input

第一行n表示区间的个数
接下来n行每行两个整数l r描述一个区间[l,r]

Output

 
在一行中输出最大权值

Sample Input

4
1 6
4 8
2 7
3 5

Sample Output

24

HINT

样例解释

选择[1,6]和[2,7]是最优的。

数据约定

100%:1<N<=10^6,1<=L<R<=10^6


首先有结论:肯定有一种最优方案只选了两个,因为选n个不会比只选左右的区间更优。

于是按左端点排序,然后把区间包含的那种直接统计答案并踢掉。

现在左右都单调了,可以证明满足决策单调性。

直接上决策单调性即可。

注意这道题区间长度为r-l。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
__attribute__((optimize("-O3")))inline char nc() {
static char buf[100000],*p1,*p2;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
__attribute__((optimize("-O3")))int rd() {
int x=0;
char s=nc();
while(s<'0'||s>'9') s=nc();
while(s>='0'&&s<='9') x=(x<<3)+(x<<1)+s-'0',s=nc();
return x;
}
#define N 1000050
struct Line {
int l,r;
bool operator < (const Line &x) const {
return l<x.l;
}
}a[N];
struct A {
int l,r,p;
}Q[N];
__attribute__((optimize("-O3")))ll Y(int j,int i) {
// if(a[j].r<a[i].l) return -1ll<<60;
return 1ll*(a[j].r-a[i].l)*(a[i].r-a[j].l);
}
__attribute__((optimize("-O3")))int find(const A &a,int x) {
int l=a.l,r=a.r+1;
while(l<r) {
int mid=(l+r)>>1;
if(Y(a.p,mid)>=Y(x,mid)) l=mid+1;
else r=mid;
}
return l;
}
ll ans;
int n;
__attribute__((optimize("-O3")))int main() {
n=rd();
register int i,t=0;
for(i=1;i<=n;i++) {
a[i].l=rd();
a[i].r=rd();
}
sort(a+1,a+n+1); a[0].r=-1;
for(i=1;i<=n;i++) {
if(a[i].r<=a[t].r) {
ans=max(ans,1ll*(a[t].r-a[t].l)*(a[i].r-a[i].l));
}else a[++t]=a[i];
}
n=t;
int l=0,r=0;
Q[r++]=(A){1,n,1};
for(i=2;i<=n;i++) {
if(l<r) Q[l].l++;
while(l<r&&Q[l].l>Q[l].r) l++;
if(l<r) ans=max(ans,Y(Q[l].p,i));
if(l==r||Y(i,n)>Y(Q[r-1].p,n)) {
while(l<r&&Y(i,Q[r-1].l)>Y(Q[r-1].p,Q[r-1].l)) r--;
if(l==r) Q[r++]=(A){i,n,i};
else {
int x=find(Q[r-1],i);
Q[r-1].r=x-1; Q[r++]=(A){x,n,i};
}
}
}
printf("%lld\n",ans);
}

BZOJ_2369_区间_决策单调性的更多相关文章

  1. BZOJ_5311_贞鱼_决策单调性+带权二分

    BZOJ_5311_贞鱼_决策单调性+带权二分 Description 众所周知,贞鱼是一种高智商水生动物.不过他们到了陆地上智商会减半. 这不?他们遇到了大麻烦! n只贞鱼到陆地上乘车,现在有k辆汽 ...

  2. BZOJ2687 交与并/BZOJ2369 区间【决策单调性优化DP】【分治】

    Description 对于一个区间集合 {A1,A2--Ak}(K>1,Ai不等于Aj(i不等于J),定义其权值 S=|A1∪A2∪--AK|*|A1∩A2--∩Ak| 即它们的交区间的长度乘 ...

  3. [NOI2016]区间 题解(决策单调性+线段树优化)

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 1593  Solved: 869[Submit][Status][ ...

  4. luogu P1721 [NOI2016]国王饮水记 斜率优化dp 贪心 决策单调性

    LINK:国王饮水记 看起来很不可做的样子. 但实际上还是需要先考虑贪心. 当k==1的时候 只有一次操作机会.显然可以把那些比第一个位置小的都给扔掉. 然后可以得知剩下序列中的最大值一定会被选择. ...

  5. [NOI2009]诗人小G(dp + 决策单调性优化)

    题意 有一个长度为 \(n\) 的序列 \(A\) 和常数 \(L, P\) ,你需要将它分成若干段,每 \(P\) 一段的代价为 \(| \sum ( A_i ) − L|^P\) ,求最小代价的划 ...

  6. CodeForces 868F Yet Another Minimization Problem(决策单调性优化 + 分治)

    题意 给定一个序列 \(\{a_1, a_2, \cdots, a_n\}\),要把它分成恰好 \(k\) 个连续子序列. 每个连续子序列的费用是其中相同元素的对数,求所有划分中的费用之和的最小值. ...

  7. Lightning Conductor 洛谷P3515 决策单调性优化DP

    遇见的第一道决策单调性优化DP,虽然看了题解,但是新技能√,很开森. 先%FlashHu大佬,反正我是看了他的题解和精美的配图才明白的,%%%巨佬. 废话不多说,看题: 题目大意 已知一个长度为n的序 ...

  8. CF868F Yet Another Minimization Problem 分治决策单调性优化DP

    题意: 给定一个序列,你要将其分为k段,总的代价为每段的权值之和,求最小代价. 定义一段序列的权值为$\sum_{i = 1}^{n}{\binom{cnt_{i}}{2}}$,其中$cnt_{i}$ ...

  9. P2877 [USACO07JAN]牛校Cow School(01分数规划+决策单调性分治)

    P2877 [USACO07JAN]牛校Cow School 01分数规划是啥(转) 决策单调性分治,可以解决(不限于)一些你知道要用斜率优化却不会写的问题 怎么证明?可以暴力打表 我们用$ask(l ...

随机推荐

  1. 3D投影

    3D投影方式的几大种类: 1.快门式 主动快门式即时分式,不过我们通常用前面的叫法,快门式3D眼镜(3D Shutter Glasses,也称作LC shutter glassesor active  ...

  2. npm升级所有可更新包

    使用npm管理node的包,可以使用npm update <name>对单个包升级,对于npm的版本大于 2.6.1,可以使用命令: npm install -g 升级全局的本地包. 对于 ...

  3. 建立第一个Sencha Touch应用

    准备 开始开发前,请先到下面的地址下载Sencha Touch 2的包:http://www.sencha.com/products/touch/download/ .下载完解压后你会发现包里有很多文 ...

  4. 【凯子哥带你夯实应用层】使用ActionProvider实现子菜单时遇到的一个坑

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 近期在重温Android基础.在看到ActionProvider的时候遇到一个坑.分享到大家,避免入坑. 首 ...

  5. 我的Android进阶之旅------&gt;解决:Execution failed for task &#39;:app:transformResourcesWithMergeJavaResForDebug&#39;.

    错误描写叙述 今天在Android Studio项目中添加了jackson的开发包,编译执行时候.引发了例如以下的错误: Error:Execution failed for task ':app:t ...

  6. MySQL 下优化SQL语句的一些经验

    http://java-guru.iteye.com/blog/143377

  7. Java EJB JBoss

    JBoss:JBoss是web服务器的一种,主要做EJB容器,和tomcat集成就可以jsp,servlet,ejb通吃了JBoss有两种版本,一种是独立的,一种是和tomcat集成的,当然都是免费的 ...

  8. Terminal emulator

    http://en.wikipedia.org/wiki/Terminal_emulator Terminal emulator From Wikipedia, the free encycloped ...

  9. HDU1009_FatMouse&#39; Trade【贪心】【水题】

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  10. java开发之随笔记录

    1.java 保留两位小数 DecimalFormat df = new DecimalFormat("#.##"); System.out.println(df.format(1 ...