Vijos 1055 奶牛浴场
Description
求一个不覆盖指定点的最大子矩阵,\(n,m \leqslant 3\times 10^5,S \leqslant 5\times 10^3\) .
Sol
没有名字的算法都叫xjblg算法?
枚举每个点成为极大子矩阵边界的情况,然后维护上下边界.
还有一种情况就是左右边界是矩阵两边的情况,需要预处理一下.
时间复杂度 \(O(S^2)\) 空间复杂度 \(O(S)\)
Code
#include<cstdio>
#include<utility>
#include<algorithm>
#include<functional>
#include<iostream>
using namespace std; #define mpr make_pair
typedef pair< int,int > pr;
typedef long long LL;
const int N = 5005; int n,m,k;LL ans;
pr g[N];
int x[N],y[N]; inline int in(int x=0,char ch=getchar()){ while(ch>'9' || ch<'0') ch=getchar();
while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
int main(){
n=in(),m=in(),k=in();
for(int i=1,u,v;i<=k;i++) u=in(),v=in(),g[i]=mpr(u,v),y[i]=v;
g[++k]=mpr(0,0),y[k]=0,g[++k]=mpr(0,m),y[k]=m,g[++k]=mpr(n,0),y[k]=0,g[++k]=mpr(n,m),y[k]=m;
sort(y+1,y+k+1);
for(int l=1,r;l<=k;l=r+1){
r=l;
while(r<k && y[l]==y[r+1]) ++r;
ans=max(ans,(LL)m*(y[l]-y[l-1]));
}
sort(g+1,g+k+1,less<pr>());
for(int i=1;i<=k;i++){
int u=0,d=n;
for(int j=i+1;j<=k;j++){
ans=max(ans,(LL)(g[j].first-g[i].first)*(d-u));
if(g[j].second>g[i].second) d=min(d,g[j].second);
else if(g[j].second<g[i].second) u=max(u,g[j].second);
else break;
}
}
sort(g+1,g+k+1,greater<pr>());
for(int i=1;i<=k;i++){
int u=0,d=n;
for(int j=i+1;j<=k;j++){
ans=max(ans,(LL)(g[i].first-g[j].first)*(d-u));
if(g[j].second>g[i].second) d=min(d,g[j].second);
else if(g[j].second<g[i].second) u=max(u,g[j].second);
else break;
}
}cout<<ans<<endl;
return 0;
}
Vijos 1055 奶牛浴场的更多相关文章
- vijos P1055奶牛浴场&& Winter Camp2002
这道题是我在寒假的模拟赛里碰到的,现在想起来仍觉得余味无穷.题目大意大致如下:给你一个矩形并在其中划出一个最大的子矩形,当然,在这个矩形里有些地方是取不到的,也就是说我们划的这个子矩形不能包含这些点( ...
- P1578 奶牛浴场
P1578 奶牛浴场 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每头奶牛都必 ...
- 洛谷P1578 奶牛浴场
P1578 奶牛浴场 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每头奶牛都必 ...
- 洛谷1578:[WC2002]奶牛浴场——题解
https://www.luogu.org/problemnew/show/P1578#sub 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建 ...
- [WC2002][洛谷P1578]奶牛浴场
洛谷题解里那个人可真是话多呢. 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每 ...
- vijos1055 奶牛浴场
挺好的一道题呢 O(n^2)或者O(wh) #include<cstdio> #include<cstring> #include<cstdlib> #includ ...
- Vijos1055 奶牛浴场(极大化思想求最大子矩形)
思路详见 王知昆<浅谈用极大化思想解决最大子矩形问题> 写得很详细(感谢~....) 因为不太会用递推,所以用了第一种方法,时间复杂度是O(n^2),n为枚举的点数,对付这题绰绰有余 思路 ...
- 洛谷 [P1578] WC2002 奶牛浴场
本题是一道用极大化思想求最大子矩阵的经典题目.这个题目很出名,可以在百度搜索王知昆国家队dalao的论文,其中说的非常详细. 先枚举极大子矩形的左边界,然后从左到右依次扫描每一个障碍点,并不断修改可行 ...
- luogu P1578 奶牛浴场
很好的一道题 王知昆爷爷的论文(讲的特别清楚) https://wenku.baidu.com/view/bc8311f69e314332396893f7.html 先贴上AC代码 #include& ...
随机推荐
- Java排序算法——插入排序
import java.util.Arrays; //================================================= // File Name : Select_S ...
- cmake 静态调用 c++ dll 的类的一个例子(Clion IDE)
CMakeLists.txt project(aaa) add_library(aaa SHARED aaa.cpp) add_executable(bbb bbb.cpp) target_link_ ...
- 关于linux发行版i386/i686/x86-64/的区别
http://blog.chinaunix.net/uid-20448327-id-172412.html
- sufeinet
http://www.sufeinet.com http://tool.sufeinet.com/
- Java 自动装箱与拆箱
Java 自动装箱与拆箱(Autoboxing and unboxing) 什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供 ...
- Jsp与servlet的区别
Jsp与servlet的区别 2011-12-09 16:27:47 分类: Java 1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识 ...
- OC-弱语法
[Person test] : unrecognized selector sent to instance 给Person对象发送了一个不能识别的消息 :test
- chrome(谷歌浏览器)老是提示此文件可能损害计算机
chrome://settings/advanced设置-高级设置-“隐私设置”-取消选中“启用针对网上诱骗和恶意软件的防护功能”复选框试试,
- Linux服务器管理: 系统的定时任务crond
cornd 是定时任务的守护进程 这个服务系统是默认启动的 [root@localhost/]#/etc/init.d/crond strat|restart|stop [root@localhos ...
- jQuery.validator 详解二
前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示的内部实现 一.插件结构(组织方式) 在讲 ...