题目

分析

枚举两个纵坐标i、j,接着表示枚举区域的上下边界,

设对于每个横坐标区域的前缀和和为\(s_l\),枚举k,

显然当\(s_k>s_l\)时,以(i,k)为左上角,(j,k)为右下角的矩阵一定合法。



k从小到大,维护一个单调队列,

显然当\(l1<l2\)时

如果\(s_{l1}<s_{l2}\),l2一定对答案没有贡献,就不将其加入单调队列。

对于一个k,在单调队列中二分,枚举出一个最小的位置,并且\(s_k>s_l\)。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
const int N=305;
using namespace std;
long long sum[N][N],num[N];
int d[N],tot,n,m;
int ans;
inline int read(long long &n)
{
char ch=' ';
int q=0,w=1;
for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());
if(ch=='-') w=-1,ch=getchar();
for(;ch>='0' && ch<='9';ch=getchar()) q=q*10+ch-48;n=q*w;
return n;
}
inline long long sum1(int x,int y,int x1,int y1)
{
return sum[x1][y1]-sum[x-1][y1]-sum[x1][y-1]+sum[x-1][y-1];
}
int main()
{
scanf("%d%d",&n,&m);
int i,j,k;
long long p;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
read(sum[i][j]);
sum[i][j]=sum[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
}
ans=0;
int l=1,r=tot,mid;
for(i=1;i<=n;i++)
for(j=n;j>=i && (j-i+1)*m>ans;j--)
{
int e=j-i+1;
tot=1;
for(k=1;k<=m;k++)
{
p=sum1(i,1,j,k);
if((j-i+1)*k>ans)
{
l=1;
r=tot;
while(l<r)
{
mid=(l+r)/2;
if(num[mid]<p)
r=mid;
else l=mid+1;
}
if(num[l]<p) ans=max(ans,e*(k-d[l]));
}
if(p<num[tot])
{
d[++tot]=k;
num[tot]=p;
}
}
}
printf("%d",ans);
}

【NOIP2016提高A组模拟10.15】最大化的更多相关文章

  1. 【JZOJ4820】【NOIP2016提高A组模拟10.15】最大化

    题目描述 输入 输出 样例输入 3 2 4 0 -10 8 -2 -2 样例输出 4 数据范围 解法 枚举两条扫描线,在这两条扫描线之间的矩阵,可以将之转化为一个序列b[i]=a[i][1..m]. ...

  2. NOIP2016提高A组模拟10.15总结

    第一题,就是将原有的式子一步步简化,不过有点麻烦,搞了很久. 第二题,枚举上下边界,维护一个单调队列,二分. 比赛上没有想到,只打了个暴力,坑了80分. 第三题,贪心,最后的十多分钟才想到,没有打出来 ...

  3. 【NOIP2016提高A组模拟10.15】打膈膜

    题目 分析 贪心, 先将怪物按生命值从小到大排序(显然按这个顺序打是最优的) 枚举可以发对少次群体攻击, 首先将所有的群体攻击发出去, 然后一个一个怪物打,当当前怪物生命值大于2,如果还有魔法值就放重 ...

  4. 【NOIP2016提高A组模拟10.15】算循环

    题目 分析 一步步删掉循环, 首先,原式是\[\sum_{i=1}^n\sum_{j=1}^m\sum_{k=i}^n\sum_{l=j}^m\sum_{p=i}^k\sum_{q=j}^l1\] 删 ...

  5. 【JZOJ4819】【NOIP2016提高A组模拟10.15】算循环

    题目描述 输入 输出 样例输入 167 198 样例输出 906462341 数据范围 解法 令f(n)=∑ni=1i,g(n)=∑ni=1i2 易得ans=∑ni=1∑mj=1f(n−i+1)∗f( ...

  6. 【NOIP2016提高A组模拟9.15】Osu

    题目 分析 考虑二分答案, 二分小数显然是不可取的,那么我们将所有可能的答案求出来,记录在一个数组上,排个序(C++调用函数很容易超时,手打快排,时间复杂度约为\(O(>8*10^7)\),但相 ...

  7. 【NOIP2016提高A组模拟8.15】Garden

    题目 分析 其实原题就是[cqoi2012][bzoj2669]局部极小值. 有一个n行m列的整数矩阵,其中1到nm之间的每个整数恰好出现一次.如果一个格子比所有相邻格子(相邻是指有公共边或公共顶点) ...

  8. 【JZOJ4784】【NOIP2016提高A组模拟9.15】Map

    题目描述 输入 输出 样例输入 4 4 2 1 2 2 3 3 2 3 4 1 2 1 4 样例输出 14 数据范围 样例解释 upd:保证原图连通. "不相交路径"的定义为不存在 ...

  9. 【NOIP2016提高A组模拟9.15】Map

    题目 分析 发现,当原图是一棵树的时候,那么新建一条边后,就会变成环套树, 而环内的所有点对都是安全点对,如果环中有k个点,答案就是\(k(k-1)\) 联想到,当把原图做一遍tarjan缩点,每个环 ...

随机推荐

  1. myeclipse_2017_CI_8安装与破解

    一.下载myeclipse_2017_CI_8安装包与破解文件 二.安装myeclipse_2017_CI_8,安装完成后不要运行MyEclipse,将 "launch MyEclipse ...

  2. Python学习之协程

    8.8 协程 ​ 我们都知道线程间的任务切换是由操作系统来控制的,而协程的出现,就是为了减少操作系统的开销,由协程来自己控制任务的切换 ​ 协程本质上就是线程.既然能够切换任务,所以线程有两个最基本的 ...

  3. <数据结构系列2>栈的实现与应用(LeetCode<有效的的括号>)

    首先想要实现栈,就得知道栈为何物,以下一段摘抄至百度百科: 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底. ...

  4. C++ 结构体重载运算符

    听说这个东西有很多种写法什么的,来不及了(要退役了),先整一个之前用到的,可能用到的频率比较高的东西上来. struct node{ ll x,y; }; bool operator < (co ...

  5. Prometheus Querying Function rate() vs irate()

    rate() rate(v range-vector) calculates the per-second average rate of increase of the time series in ...

  6. python小游戏2

    import hashlib 过段时间会来解释下hashlib的源码(能力有限请大家谅解)#根据md5模块来加密密码 def pwd_md5(pwd): ''' 加密用户输入过来的密码 :param ...

  7. IntelliJ IDEA将导入的项目转成maven项目

    今天导入公司的maven项目,发现结构不对劲,难怪说为啥一直不能部署tomcat,后面百度才了解到导入这个项目还不是maven项目,首先需要把这个项目变成maven项目,然后再进行tomcat的部署下 ...

  8. excel常用公式--关联匹配类

    index: 根据位置返回单元格的值. match: 根据单元格的值返回位置. index+match替代vlookup rank:返回一列数字的数字排位.数字的排位是其相对于列表中其他值的大小.

  9. C语言作业7

    问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://i.cnblogs.com/EditPosts.aspx?opt=1 我在这个课程的目标是 在学好C语言编程的 ...

  10. udb

    1/  配置升级 高可用实例创建时默认是 一主一备  所以可以在线升级, 先升级备库 然后升级主库 所以可以在线升级 只是主备切换的时候有闪断会影响20s左右 有单独创建的从库  那就是一主一备 + ...