题目描述

题解:

答案显然是$max((q-p)*(e-d))$

依然先贪心。

对于工厂,我们倾向于$pi<pj,di<dj$的;

对于买家,我们倾向于$qi>qj,ei>ej$的。

于是将一定不是最优解的工厂和买家划掉。

然后我们发现这个东西是满足决策单调性的。

问我怎么证?画一个二维坐标系,然后将选中的点都画上,然后就理性易证了。

最后分治。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 500050
#define ll long long
inline ll rd()
{
ll f=,c=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=*c+ch-'';ch=getchar();}
return f*c;
}
int n0,m0,n,m;
struct Pair
{
ll x,y;
Pair(){}
Pair(ll x,ll y):x(x),y(y){}
};
bool cmp1(Pair a,Pair b)
{
if(a.x!=b.x)return a.x<b.x;
return a.y<b.y;
}
bool cmp2(Pair a,Pair b)
{
if(a.x!=b.x)return a.x<b.x;
return a.y>b.y;
}
Pair a0[N],b0[N],a[N],b[N];
ll ans = ;
void divi(int l1,int r1,int l2,int r2)
{
if(l1>r1||l2>r2)return ;
if(l1==r1)
{
for(int i=l2;i<=r2;i++)
if(b[i].x>a[l1].x)ans = max(ans,(b[i].x-a[l1].x)*(b[i].y-a[l1].y));
return ;
}
if(l2==r2)
{
for(int i=l1;i<=r1;i++)
if(b[l2].x>a[i].x)ans = max(ans,(b[l2].x-a[i].x)*(b[l2].y-a[i].y));
return ;
}
int mid = (l2+r2)>>;
int pos=l1;
ll max_val=-0x3f3f3f3f3f3f3f3fll;
for(int i=l1;i<=r1;i++)
{
if(b[mid].x<=a[i].x&&b[mid].y<=a[i].y)continue;
if((b[mid].x-a[i].x)*(b[mid].y-a[i].y)>max_val)
{
pos = i;
max_val=(b[mid].x-a[i].x)*(b[mid].y-a[i].y);
}
}
ans=max(ans,max_val);
divi(l1,pos,l2,mid-);
divi(pos,r1,mid+,r2);
}
int main()
{
// freopen("33.in","r",stdin);
n0 = rd(),m0 = rd();
for(int i=;i<=n0;i++)
a0[i].x = rd(),a0[i].y = rd();
for(int i=;i<=m0;i++)
b0[i].x = rd(),b0[i].y = rd();
sort(a0+,a0++n0,cmp1);
sort(b0+,b0++m0,cmp2);
ll lim = 0x3f3f3f3f3f3f3f3fll;
for(int i=;i<=n0;i++)
if(a0[i].y<lim)
{
a[++n]=a0[i];
lim = a0[i].y;
}
for(int i=;i<=m0;i++)
{
while(m&&b[m].y<=b0[i].y)m--;
b[++m]=b0[i];
}
divi(,n,,m);
printf("%lld\n",ans);
return ;
}

bzoj4951 [Wf2017]Money for Nothing的更多相关文章

  1. 4951: [Wf2017]Money for Nothing 决策单调性 分治

    Bzoj4951:决策单调性 分治 国际惯例题面:一句话题面:供应商出货日期为Ei,售价为Pi:用户收购截止日期为Si,收购价格为Gi.我们要求max((Si-Ej)*(Gi-Pj)).显然如果我们把 ...

  2. BZOJ4951 Wf2017Money for Nothing(决策单调性)

    按时间排序,显然可能存在于答案中的公司价格应该单调递减.然后就可以大胆猜想感性证明其有决策单调性.具体地,设f(i,j)表示第i个消费公司和第j个生产公司搭配的获利,f(i,j)=(ti-tj)*(c ...

  3. 4950: [Wf2017]Mission Improbable

    4950: [Wf2017]Mission Improbable Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 608  Solved: 222[Sub ...

  4. 【WF2017】Mission Improbable

    http://www.lydsy.com/JudgeOnline/problem.php?id=4950 对于俯视图很好解决,把所有不是0的位置拿到剩1就可以了. 对于正视图与侧视图,稍微想一下也能发 ...

  5. 【刷题】BZOJ 4950 [Wf2017]Mission Improbable

    Description 那是春日里一个天气晴朗的好日子,你准备去见见你的老朋友Patrick,也是你之前的犯罪同伙.Patrick在编程竞赛上豪赌输掉了一大笔钱,所以他需要再干一票.为此他需要你的帮助 ...

  6. 【bzoj4952】[Wf2017]Need for Speed 二分

    题目描述 已知$\sum\limits_{i=1}^n\frac{d_i}{s_i+c}=t$,求$c$ $(d_i>0,s_i+c>0)$ 输入 第一行包含两个整数n(1≤n≤1000) ...

  7. 【bzoj4950】【 [Wf2017]Mission Improbable】贪心+二分图匹配

    (上不了p站我要死了,侵权度娘背锅) Description 那是春日里一个天气晴朗的好日子,你准备去见见你的老朋友Patrick,也是你之前的犯罪同伙.Patrick在编程竞赛 上豪赌输掉了一大笔钱 ...

  8. bzoj 4951: [Wf2017]Money for Nothing【分治】

    参考:https://blog.csdn.net/herobrine_tkj/article/details/78404426?locationNum=8&fps=1 为什么从1开始存就挂了, ...

  9. bzoj4950: [Wf2017]Mission Improbable

    跟着靖靖做题%%%%% 这题一看就觉得和之前的某场模拟赛的一道题很像,找假如某行某列的最大值一样的就可以只堆一个,跑匈牙利就行 一开始以为箱子不能移动-_-! 然后有个坑,大家都知道当这个位置有箱子就 ...

随机推荐

  1. Ruby主要方法

         方法定义        def hello(name) ...  end                                                函数名 参数 作用 备 ...

  2. hihoCoder扩展欧几里得

    #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h&g ...

  3. kettle系列-我的开源kettle调度、管理平台[kettle-manager]介绍

    kettle管理工具 专门为kettle这款优秀的ETL工具开发的web端调度.管理工具. 新版本 项目简介 kettle作为非常优秀的开源ETL工具得到了非常广泛的使用,一般的使用的都是使用客户端操 ...

  4. python __builtins__ license类 (41)

    41.'license', 许可证,执照 class _Printer(builtins.object) | interactive prompt objects for printing the l ...

  5. BZOJ 2457 [BeiJing2011] 双端队列

    2457: [BeiJing2011]双端队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 340  Solved: 167[Submit][Sta ...

  6. 解决 Xshell 连接出现 The remote SSH server rejected X11 forwarding request 问题

    问题描述 使用 Xshell 5 首次连接虚拟机 CentOS 7.6 出现这样的提示: WARNING! The remote SSH server rejected X11 forwarding ...

  7. c++运费符优先级

    L:左      R:右

  8. UWP 剪贴板

    一:剪贴板 一般的复制,用户自己光标选中文本,crtl +c复制就可以了.但是有时候也需求有一个复制的按钮,当用户点击复制按钮,就可以把当前的某些内容复制到剪贴板里. 这里就用到了DataPackag ...

  9. Pursuit For Artifacts CodeForces - 652E

    https://vjudge.net/problem/CodeForces-652E 边双啊,就是点双那个tarjan里面,如果low[v]==dfn[v](等同于low[v]>dfn[u]), ...

  10. Kruskal 2015百度之星初赛2 HDOJ 5253 连接的管道

    题目传送门 /* 最小生成树(Kruskal):以权值为头,带入两个端点,自然的排序;感觉结构体的并查集很好看 注意:题目老头要的是两个农田的高度差,中文水平不好,题意理解成和平均值的高度差! */ ...