Description

农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <
= 1,000,000; 1 <= 长 <= 1,000,000). 每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价
格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. 如果FJ买一块3x5的地和一块5x3的地,则他需要
付5x5=25. FJ希望买下所有的土地,但是他发现分组来买这些土地可以节省经费. 他需要你帮助他找到最小的经费.

Input

* 第1行: 一个数: N
* 第2..N+1行: 第i+1行包含两个数,分别为第i块土地的长和宽

Output

* 第一行: 最小的可行费用.

Sample Input

4
100 1
15 15
20 5
1 100
输入解释:
共有4块土地.

Sample Output

500
FJ分3组买这些土地:
第一组:100x1,
第二组1x100,
第三组20x5 和 15x15 plot.
每组的价格分别为100,100,300, 总共500.

Solution

若一个矩形可以被其他矩形覆盖,那么其实这个矩形是不需要考虑的。
按x第一关键字,y第二关键字从小到大排序,单调栈就可以搞了。
然后可以发现长为递增,宽为递减。
就很容易发现是斜率优化了……p[i]为自变量,q[j+1]为斜率
维护上凸,斜率优化

Code

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define LL long long
#define N (50000+100)
using namespace std;
struct node
{
LL x,y;
}land[N];
bool cmp(node a,node b) { return a.x<b.x || a.x==b.x && a.y<b.y; } LL p[N],q[N],cnt;
LL Q[N*],head,tail;
LL f[N],n; LL K(LL j) { return q[j+]; }
LL B(LL j) { return f[j]; }
LL Y(LL i,LL j) { return K(j)*p[i]+B(j); } LL cover(LL x1,LL x2,LL x3)
{
LL w1=(B(x1)-B(x2))*(K(x3)-K(x1));
LL w2=(B(x1)-B(x3))*(K(x2)-K(x1));
return w1<=w2;
} int main()
{
scanf("%lld",&n);
for (LL i=;i<=n;++i)
scanf("%lld%lld",&land[i].x,&land[i].y);
sort(land+,land+n+,cmp);
for (LL i=;i<=n;++i)
{
while (cnt && land[i].y>=q[cnt]) cnt--;
p[++cnt]=land[i].x; q[cnt]=land[i].y;
}
LL head=,tail=;
for (LL i=;i<=cnt;++i)
{
while (head<tail && Y(i,Q[head])>=Y(i,Q[head+])) head++;
f[i]=Y(i,Q[head]);
while (head<tail && cover(i,Q[tail],Q[tail-])) tail--;
Q[++tail]=i;
}
printf("%lld",f[cnt]);
}

最新文章

  1. iOS-C基础
  2. go get安装第三方包的前提条件和步骤
  3. HotSpot虚拟机对象介绍
  4. java字符串拼接与性能
  5. LeetCode 342. Power of Four
  6. GIM企业即时通讯
  7. sqlite加密
  8. 解决JSP 不解析EL表达式
  9. Java学习笔记(五):异常处理
  10. Hdu2425-Hiking Trip(优先队列搜索)
  11. eclipse下的web开发问题总结[struts2文件上传]
  12. li排序
  13. js json string 互转
  14. XEvent – SQL Server Log文件对磁盘的写操作大小是多少
  15. 机器学习笔记-1 Linear Regression with Multiple Variables(week 2)
  16. 解决MyEclipse中的Building workspace问题
  17. 理解Spring中的IOC和AOP
  18. 使用uiautomator2进行webview页面的测试
  19. Mac idea中git igenore设置
  20. 在linux下面解压用的zxpf是什么意思,它跟zxvf有啥区别

热门文章

  1. 热更新--动态加载framework
  2. JAVA基础之——三大特征、接口和抽象类区别、重载和重写区别、==和equals区别、JAVA自动装箱和拆箱
  3. Django HTML 转义
  4. python中作用域
  5. UOJ#328. 【UTR #3】量子破碎
  6. BZOJ3524: [Poi2014]Couriers(主席树)
  7. git报错:Pull is not possible because you have unmerged files解决方法
  8. JAVA 分布式 - 分布式介绍
  9. @Secured()、 @PreAuthorize() 、 @RolesAllowed()
  10. Linux(CentOS)之-性能监控