整体二分+决策单调性

这个方法已经忘了...

决策单调性是指dp[i]由dp[1]->dp[i-1]更新,那么当dp[j]比dp[k]优且j>k时,对于i->n j都比k优

通过这个性质我们可以把dp优化到nlogn

具体做法是整体二分

solve(l,r,L,R)表示当前对于l->r的dp决策区间在L->R

那么我们选中(l+r)/2,并且枚举所有L->R满足的决策来更新,solve(l,mid-1,L,p) solve(mid+1,r,p,R)

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+;
typedef long long ll;
int n;
int m;
ll ans;
struct data {
ll l, r;
data() {}
data(ll _l, ll _r) : l(_l), r(_r) {}
bool friend operator < (const data &a, const data &b) {
return a.l == b.l ? a.r > b.r : a.l < b.l;
}
} a[N], b[N];
ll calc(int i, int j)
{
return (b[j].r - b[i].l)*(b[i].r - b[j].l);
}
void cdq(int l, int r, int L, int R)
{
if(l > r) return;
int mid = (l+r)>>, lim = min(R, mid-), p=mid;
ll mx=;
for(int i=lim; i>=L; --i)
{
ll tmp = calc(i, mid);
if(tmp > mx)
{
p = i;
mx = tmp;
}
}
ans = max(ans, mx);
cdq(l, mid - , L, p);
cdq(mid + , r, p, R);
}
int main()
{
scanf("%d", &n);
for(int i = ; i <= n; ++i) scanf("%d%d", &a[i].l, &a[i].r);
sort(a + , a + n + );
int p = ;
for(int i = ; i <= n; ++i) if(a[i].r > a[p].r) b[++m] = a[i], p = i;
else ans = max(ans, (a[p].r - a[p].l) * (a[i].r - a[i].l));
cdq(, m, , m);
printf("%lld\n", ans);
return ;
}

bzoj2687的更多相关文章

  1. bzoj2687: 交与并

    Description     对于一个区间集合{A1,A2……AK}(K>1,Ai<>Aj{i<>j}),我们定义其权值           W=|A1∪A2∪……∪A ...

  2. [BZOJ2687]交与并[决策单调性]

    题意 给定 \(n\) 个区间,我们定义区间集合 \(S(|S|>1)\) 的权值为 区间交 \(\times\) 区间并,找出权值最大的区间集合. \(n\le 10^6\) 分析 首先排除区 ...

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

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

  4. 「6月雅礼集训 2017 Day4」qyh(bzoj2687 交与并)

    原题传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2687 [题目大意] 给出若干区间,求一个区间的大于等于2的子集,使得 |区间并| 和 | ...

  5. 10月wish me luck

    10/13 明天开始的三天 就要跟历史地理化学说拜拜了 以诚待之 好运 10/20 P三角形计数:一看就是叉积.因为去年迪子讲过.但是我已经忘记了.所以重新写了一遍.把所有的点有序化,将三角形面积转化 ...

  6. 使用单调队列维护决策三元组实现决策单调性优化DP的一些细节

    以[BZOJ2687]交与并为例给出代码. #include <bits/stdc++.h> #define rin(i,a,b) for(register int i=(a);i< ...

随机推荐

  1. run kubernetes

    use kubeadm in lab only,,, do not use it in production      install docker 1.12.6 -..   please noted ...

  2. 《图论》——广度优先遍历算法(BFS)

    十大算法之广度优先遍历: 本文以实例形式讲述了基于Java的图的广度优先遍历算法实现方法,详细方法例如以下: 用邻接矩阵存储图方法: 1.确定图的顶点个数和边的个数 2.输入顶点信息存储在一维数组ve ...

  3. Solaris主机间的信任关系机制

    解决问题: 管理员经常在其他服务器之间登录,是否需要密码切换. 知识点:主机间信任关系.R 命令集 /etc/hosts/equiv 文件 R服务是不加密的,别人可以破解. 主机名 + 用户名. + ...

  4. Jquery 插件 实例

    先说明下应用场景,通过可配项的配置和默认项覆盖,获取指定的需求数据,填充到指定的位置(两个指定其实都是可配的) (function($) { $.fn.extend({ getOneNews: fun ...

  5. BZOJ 2818 Gcd 线性欧拉

    题意:链接 方法:线性欧拉 解析: 首先列一下表达式 gcd(x,y)=z(z是素数而且x,y<=n). 然后我们能够得到什么呢? gcd(x/z,y/z)=1; 最好还是令y>=x 则能 ...

  6. Activity和ListActivity的区别

    http://book.51cto.com/art/201007/212051.htm

  7. 20170306 处理adobe flash player报错

    网页总是弹出Adobe Flash Player弹窗报错怎么办?打开网页时经常被Adobe Flash Player报错提示框困扰. 其实是因为系统安装了Debug版本的Flash Player,可是 ...

  8. PPTP&L2TP&PPPOE client and server configure

    一. PPPOE 1. server(参考http://laibulai.iteye.com/blog/1171898) (1)安装rp-pppoe:yum install rp-pppoe (2)配 ...

  9. MD5 字符串问题

    早上来工位,大家再聊md5,无意中发现网上有个人提出个问题:研究了一下,挺有意思 有个串,通过各种办法得到的值不完全一样,下面请看细节: 假设这个字符串是 “ssss"我用的第一个办法应该是 ...

  10. Nodejs下如何判断文件夹的存在以及删除文件夹下所有的文件

    代码如下: var folder_exists = fs.existsSync('./cache'); if(folder_exists == true) { var dirList = fs.rea ...