【JZOJ4820】最大化
来源:互联网 发布:wifi无线传输软件 编辑:程序博客网 时间:2024/06/05 00:59
Description
给出一个
Solution
枚举上界和下界,中间的一段压成一个序列。我们设
如果
那么我们找出单调下降的
Code
#include<iostream>#include<cstdio>#include<cstdlib>#define fo(i,j,k) for(int i=j;i<=k;i++)#define fd(i,j,k) for(int i=j;i>=k;i--)#define N 301#define ll long long#define inf 1000000000llusing namespace std;ll a[N][N],b[N][N];ll sum(int x1,int y1,int x2,int y2){ return b[x2][y2]-b[x2][y1-1]-b[x1-1][y2]+b[x1-1][y1-1];}int n,m;ll s[N];int dl[N];ll qq;int main(){ freopen("max.in","r",stdin); freopen("max.out","w",stdout); cin>>n>>m; fo(i,1,n) fo(j,1,m) { scanf("%lld",&a[i][j]); b[i][j]=b[i-1][j]+b[i][j-1]-b[i-1][j-1]+a[i][j]; } int ans=0; fo(u,1,n) fo(d,u,n) { int tot=0; s[0]=inf; fo(i,1,m) { ll qq=sum(u,1,d,i); s[i]=qq; if(s[dl[tot]]>qq) dl[++tot]=i; } int j=tot; fd(i,m,1) { while(dl[j]>=i) j--; if(s[i]>0) { ans=max(ans,(d-u+1)*i); break; } while(s[dl[j]]<s[i] && j) j--; j++; if(s[dl[j]]<s[i] && dl[j]<i) ans=max(ans,(d-u+1)*(i-dl[j])); } } cout<<ans;}
0 0
- 【JZOJ4820】最大化
- 【jzoj4820】【最大化】【单调栈】
- {题解}[jzoj4820]【NOIP2016提高A组模拟10.15】最大化
- 【JZOJ4820】【NOIP2016提高A组模拟10.15】最大化
- 最大化
- 最大化
- 最大化JFrame
- 最大化窗口
- swf最大化
- 设置最大化
- 窗口最大化
- 最大化平均值
- 最小值最大化
- 最大化平均值
- EasySize最大化
- QDockWidget最大化
- 最大化平均值
- 最大化平均值
- 几种字符串查找方法
- 【Linux 内核网络协议栈源码剖析】bind 函数剖析
- 明明添加引用了,但还是提示:未能找到类型或命名空间名称xxx,这是怎么回事?
- Java集合干货系列-集合总体大纲
- 欢迎使用CSDN-markdown编辑器
- 【JZOJ4820】最大化
- 正则表达式之量词、元字符、修饰符
- Leetcode-111. Minimum Depth of Binary Tree
- 树、森林、二叉树的转换
- 基本算法-将功赎过
- java的枚举
- k-近邻算法的基本实现
- 黑白棋经典残局(3)
- 【Linux 内核网络协议栈源码剖析】listen 函数剖析