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. SilverLight:布局(2)GridSplitter(网格分割)垂直分割、水平分割

    ylbtech-SilverLight-Layout: 布局(2)GridSplitter(网格分割)垂直分割.水平分割 A, Splitter(分割)对象之 GridSplitter(网格分割)1: ...

  2. Delphi图像处理 -- 文章索引

    转载:http://blog.csdn.net/maozefa/article/details/7188354 本文对已发布<Delphi图像处理>系列文章进行索引链接,以方便阅读和查找. ...

  3. linux下脚本监控网络流量

    linux下脚本监控网络流量 学习了:https://blog.csdn.net/chenghuikai/article/details/48437479 学习了:http://www.jb51.ne ...

  4. nodejs 打印机打印 pos打印

    https://www.npmjs.com/package/chn-escpos 安装window vsbuild 编译工具 npm install --global --production win ...

  5. 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】

    [002-Add Two Numbers (单链表表示的两个数相加)] 原题 You are given two linked lists representing two non-negative ...

  6. 更改 vux Tabbar TabbarItem标题下方的文字激活时的颜色

    步骤一: 打开文件build/webpack.base.conf.js, 找到modeule.exports = vuxLoader, 修改如下(并保存) module.exports = vuxLo ...

  7. python(26)- 面向对象补充Ⅱ

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)判断obj是否是类 cls 的对象 class Foo(object): ...

  8. MapReduce框架在Yarn上的具体解释

    MapReduce任务解析 在YARN上一个MapReduce任务叫做一个Job. 一个Job的主程序在MapReduce框架上实现的应用名称叫MRAppMaster. MapReduce任务的Tim ...

  9. 为了发布博客方便,现从CSDN的naedzq整体迁移到cnblogs

    为了发布博客方便,现从CSDN的naedzq整体迁移到cnblogs

  10. IDEA搭建Android wear开发环境,Android wear,I&#39;m comming!

    随着google公布了android wear这个东西.然后又有了三星的gear,LG的G watch以及moto 360,苹果由公布了apple watch.未来可能在智能手表行业又有一场战争. 当 ...