题目

分析

枚举两个纵坐标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. Oracle 笔记(四)

    PLSQL编程[语法.plsql控制语句.异常.游标.触发器.存储过程] 1.              PLSQL的语法–块编程 a)       概念:procedural language  s ...

  2. SQLALchemy如何查询mysql某个区间内的数据

    查了下,找到3种方式: 方法一注意时间格式:xxxx-xx-xx 方法二没有‘day’ 方法三的时间格式同方法一 1.result = Jobs.query.filter(Jobs.create_ti ...

  3. python 爬取动态数据

    按照:https://dryscrape.readthedocs.io/en/latest/installation.html 安装dryscrape 以下是简单实现 import dryscrape ...

  4. cocos2dx[3.2](4) 入口类AppDelegate

    这是游戏程序的入口,主要用于游戏程序的逻辑初始化,并创建运行程序的入口界面(即第一个游戏界面场景). 里面有三个方法: // applicationDidFinishLaunching(); //逻辑 ...

  5. Junit4 简单使用

    一.环境搭建 对于习惯使用Eclipse开发平台来说,Junit早已是非常通常的插件,在Eclipse开发平台中,可以非常方便地搭建Junit测试环境. 1.在Eclipse上创建工程,任何Java工 ...

  6. selenium—用NoSuchElementException异常判断页面元素是否存在

    一.知识补充 1.find_element的一种使用方法: find_element(by=方法,value=值) 例如: find_element(by="id",value=& ...

  7. 项目中使用vue的API。 和项目的结构

    <template> <!--组件的 结构--> <div id="app"> <h3>{{ msg }}</h3> & ...

  8. Forsaken喜欢数论

    链接:https://ac.nowcoder.com/acm/contest/1221/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言1048 ...

  9. 从入门到自闭之python初识

    Day 01 整型: 对比: 在python 2 版本中有整型,长整型long 在python 3 版本中全部都是整型 用于计算和比较 整型和布尔值的转换 二进制转换成十进制: ​print (int ...

  10. AWS EC2 搭建 Hadoop 和 Spark 集群

    前言 本篇演示如何使用 AWS EC2 云服务搭建集群.当然在只有一台计算机的情况下搭建完全分布式集群,还有另外几种方法:一种是本地搭建多台虚拟机,好处是免费易操控,坏处是虚拟机对宿主机配置要求较高, ...