long


题目描述

AP神牛准备给自己盖一座很华丽的宫殿。于是,他看中了一块N*M的矩形空地。空地中每个格子都有自己的海拔高度。AP想让他的宫殿的平均海拔在海平面之上(假设海平面的高度是0,平均数都会算吧?)。而且,AP希望他的宫殿尽量大,能够容纳更多的人来膜拜他。请问AP的宫殿最后会有多大?

输入输出

输入

第一行为N和M。之后N行,每行M个数,描述的空地的海拔。

输出

输出一行,表示宫殿最大面积。

样例

样例输入

3 2

4 0

-10 8

-2 -2

样例输出

4

说明

数据范围

对于30%的数据,N,M≤50;

对于100%的数据,N,M≤200;

思路

  1. 用前缀和a[i][j]表示第i行1~j列的和
  2. 开一个单调栈,存海拔之和
  3. a[k][j]-a[k][q]代表第k行第q列到第j列的海拔高度和
  4. 当s<0时,设s=p (p<0),在栈中寻找p所对应的f[p],
  5. 用当前行数k减去f[p],即可得到一段平均海拔在海平面之上的区间。

代码

#include<cstdio>
#include<iostream>
using namespace std;
long long n,m,x,a[201][201],f[201],sta[201],size,ans;
inline long long erfen(long long u) {
long long l=1,r=size,tot=-1;
while(l<=r) {
long long mid=(l+r)>>1;
if(sta[mid]<u) {
r=mid-1;
tot=mid;
} else l=mid+1;
}
return tot;
}
inline int read() {
long long x=0,w=1;
char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') w=-1,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
return x*w;
}
int main() {
freopen("long.in","r",stdin);
freopen("long.out","w",stdout);
n=read();
m=read();
for(long long i=1; i<=n; i++)
for(long long j=1; j<=m; j++) {
x=read();
a[i][j]=a[i][j-1]+x;
}
for(long long i=1; i<=m; i++)
for(long long j=1; j<=m; j++) {
long long s=0;
sta[0]=1e10;
size=0;
for(long long k=1; k<=n; k++) {
s+=a[k][j]-a[k][i-1];
if(s>0) ans=max(ans,k*(j-i+1));
else {
int z=erfen(s);
if(z!=-1) ans=max(ans,(j-i+1)*(k-f[z]));
}
if(sta[size]>s) sta[++size]=s,f[size]=k;
}
}
printf("%lld\n",ans);
return 0;
}

【单调栈】【前缀和】【二分查找】8.28题解-long的更多相关文章

  1. 线段树+单调栈+前缀和--2019icpc南昌网络赛I

    线段树+单调栈+前缀和--2019icpc南昌网络赛I Alice has a magic array. She suggests that the value of a interval is eq ...

  2. 单调栈+前缀和 || Nowcoder || 牛客小白月赛13 || 小A的柱状图

    题面:小A的柱状图 题解:无 代码: #include<cstdio> #include<cstring> #include<iostream> #define l ...

  3. [CSP-S模拟测试]:A(单调栈维护凸包+二分答案)

    题目传送门(内部题150) 输入格式 第一行两个整数$N,Q$. 接下来的$N$行,每行两个整数$a_i,b_i$. 接下来的$Q$行,每行一个整数$x$. 输出格式 对于每个询问,输出一行一个整数表 ...

  4. 2019牛客暑期多校训练营(第八场)-A All-one Matrices (单调栈+前缀和)

    题目链接:https://ac.nowcoder.com/acm/contest/888/A 题意:给n×m的01矩阵,求出其中全为1的矩阵个数(不被其它全1矩阵包括). 思路:和第二场多校的次大子矩 ...

  5. [CSP-S模拟测试]:施工(DP+单调栈+前缀和)

    题目描述 小$Y$家门前有一条街道,街道上顺序排列着$n$幢建筑,其中左起第$i$幢建筑的高度为$h_i$.小$Y$定义街道的不美观度为所有相邻建筑高度差的绝对值之和乘上常数$c$,为了改善街道环境, ...

  6. 洛谷 P3246 - [HNOI2016]序列(单调栈+前缀和)

    题面传送门 这道题为什么我就没想出来呢/kk 对于每组询问 \([l,r]\),我们首先求出区间 \([l,r]\) 中最小值的位置 \(x\),这个可以用 ST 表实现 \(\mathcal O(n ...

  7. CF978C Letters【前缀和+二分查找/几房几号】

    [链接]:CF978C [分析]:在前缀和数组种二分找到>=询问数的位置,根据位置就好操作了 [代码]: #include<bits/stdc++.h> using namespac ...

  8. 2019 牛客暑期多校 第八场 A All-one Matrices (单调栈+前缀和)

    题目:https://ac.nowcoder.com/acm/contest/888/A 题意:找全1矩阵的个数,并且这个全1矩阵不被其他全1矩阵包含 思路:这里引用付队说的话 -> { 这类问 ...

  9. 洛谷P1823 [COI2007] Patrik 音乐会的等待(单调栈+二分查找)

    洛谷P1823 [COI2007] Patrik 音乐会的等待(单调栈+二分查找) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1333275 这个题不是很 ...

  10. 【BZOJ4237】稻草人 [分治][单调栈]

    稻草人 Time Limit: 40 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description JOI村有一片荒地,上面竖着N个稻草 ...

随机推荐

  1. solidworks中 toolbox调用出现未配置的解决方法

    解决步骤:1:win7卸载安全补丁:KB3072630 WIN10,忽略.2:关闭所有Solidworks的进程3:CMD命令行进入:cd c:\program files\solidwokrs co ...

  2. Django(3)pycharm创建项目

    创建项目 我们创建django项目有两种方式,命令行方式和使用pycharm工具创建,本文就介绍常用的pycharm工具创建   首先点击django,输入项目的名称,选择创建好的虚拟环境,最后点击c ...

  3. Nginx超详细常用功能演示,够用啦~~~

    前言 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服 ...

  4. OO_Unit3_JML规格模式

    ---恢复内容开始--- [CSDN博客链接](https://blog.csdn.net/weixin_43387647/article/details/90451173) @[toc] ## 一. ...

  5. debian系统搭建telnet服务器以及telnet远程登陆--加油

    1.安装软件 sudo apt-get install telnet* 2.创建telnet文件 vim /etc/xinetd.d/telnet telnet内容 1 service telnet ...

  6. 使用alpine为基础镜像Q&A

    作为go应用存在二进制文件却不能执行 明明镜像中有对应的二进制文件,但是执行时却提示 not found 或 no such file 或 standard_init_linux.go:211: ex ...

  7. [Linux]常用命令、组合命令以及输入输出重定向

    [Linux]常用命令.组合命令以及输入输出重定向 2020-03-10阅读 1580   原创文章 文章目录 0.切换目录 1.复制文件和目录`cp` 1.1.复制文件 1.2.复制目录 1.3.扩 ...

  8. 使用 dd 命令进行硬盘 I/O 性能检测

    使用 dd 命令进行硬盘 I/O 性能检测 作者: Vivek Gite 译者: LCTT DongShuaike | 2015-08-28 07:30   评论: 1 收藏: 6 如何使用dd命令测 ...

  9. mysql基础之帮助信息

    在mysql中获取帮助 1.当连接到mysql数据库以后,使用help命令或者\?表示获取帮助信息: MariaDB [ren]> help General information about ...

  10. Java forEach 方式遍历集合(Java 8 新特性)

    JDK 8 新增 forEach 方式遍历集合,这种方式比原来的 for each 循环还要简洁和便利. 需要注意:如果你计算机安装的是 JDK 8 以前的版本,是不支持 JDK 8 的新特性 Lis ...