BZOJ 5085(最大-经典题)
来源:互联网 发布:8路监控网络交换机 编辑:程序博客网 时间:2024/06/15 06:37
Description
给你一个n×m的矩形,要你找一个子矩形,价值为左上角左下角右上角右下角这四个数的最小值,要你最大化矩形(这个矩形的行数和列数都大于1)
的价值。
Input
第一行两个数n,m,接下来n行每行m个数,用来描述矩形
n, m ≤ 1000
Output
输出一个数表示答案
Sample Input
2 2
1 2
3 4
Sample Output
1
从大到小枚举数,
显然答案的4个点在最大4*min(n,m)中。
#include<bits/stdc++.h> using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define ForkD(i,k,n) for(int i=n;i>=k;i--)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (o<<1)#define Rson ((o<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,0x3f,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define MEMx(a,b) memset(a,b,sizeof(a));#define INF (0x3f3f3f3f)#define F (1000000007)#define pb push_back#define mp make_pair#define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;#define PRi2D(a,n,m) For(i,n) { \ For(j,m-1) cout<<a[i][j]<<' ';\ cout<<a[i][m]<<endl; \ } #pragma comment(linker, "/STACK:102400000,102400000")#define ALL(x) (x).begin(),(x).end()typedef long long ll;typedef long double ld;typedef unsigned long long ull;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return ((a-b)%F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} int a[1020][1020],rk[1020][1020];pair<int ,pi > v[1000*1000+10];int main(){// freopen("bzoj5085.in","r",stdin);// freopen(".out","w",stdout); int n=read(),m=read(); int cnt=0; For(i,n) For(j,m)a[i][j]=read(),v[++cnt]=mp(a[i][j],mp(i,j)); sort(v+1,v+1+cnt); For(i,cnt) rk[v[i].se.fi][v[i].se.se]=i; ForD(i,cnt) Fork(j,i+1,cnt){ int x=v[i].se.fi,y=v[i].se.se; int xa=v[j].se.fi,ya=v[j].se.se; if(x!=xa&&y!=ya && rk[x][ya]>i && rk[xa][y]>i) { cout<<v[i].fi<<endl;return 0; } } return 0;}
阅读全文
0 0
- BZOJ 5085(最大-经典题)
- bzoj 5085: 最大
- BZOJ最大流水题集
- bzoj 1601 最小生成树经典题
- BZOJ 1954 (POJ 3764) Trie的经典应用 求树上最大异或值
- 经典的最大流题POJ1273
- poj 2391 经典题 二分+最大流
- 经典的最大流题POJ1273
- 乘积最大(动态规划经典题)
- 【BZOJ】1012 最大数
- 【BZOJ】1012 最大数
- BZOJ 1066 最大流
- BZOJ 1012, 最大数
- BZOJ 1012 最大数
- bzoj 1066 最大流
- BZOJ 1497, 最大获利
- bzoj 1458 最大流
- bzoj 1711 最大流
- 小朋友学C++(7):封装
- 对全连接层的深入理解
- 为什么我讨厌开放式办公?
- python中遍历list的三种方式
- 小朋友学C++(8):继承
- BZOJ 5085(最大-经典题)
- Android数据库操作—— GreenDao让你的数据操作更简单
- Junit测试出现异常:Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform.commons.util.
- 小朋友学C++(9):构造函数的默认参数
- BZOJ3205: [Apio2013]机器人
- 指纹识别和人脸识别
- 动态规划之单调队列优化专题
- 用户权限
- 解决输入文字换行的方法: