博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P1565 牛宫
阅读量:5914 次
发布时间:2019-06-19

本文共 1246 字,大约阅读时间需要 4 分钟。

题目描述

AP 神牛准备给自己盖一座很华丽的宫殿。于是,他看中了一块N*M 的矩形空地。

空地中每个格子都有自己的海拔高度。AP 想让他的宫殿的平均海拔在海平面之上(假设

海平面的高度是0,平均数都会算吧?)。而且,AP 希望他的宫殿尽量大,能够容纳更

多的人来膜拜他。请问AP 的宫殿最后会有多大?

输入输出格式

输入格式:

 

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

 

输出格式:

 

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

 

输入输出样例

输入样例#1:
3 24 0-10 8-2 -2
输出样例#1:
4

 

单调栈+dp

O(n^2)枚举矩形左右范围,从上往下扫每一行,如果从1到k行的总和大于0,那么整块矩形可选;如果总和小于零,将其存入一个单调递减的单调栈,这样在之后的计算中,如果smm(1~k) - smm(1~x)>0,那么行x+1到行k这部分矩形可选。查询时候用二分查找比较快。

万万没想到这题需要开long long,wa了一片

1 /*by SilverN*/ 2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #define LL long long 9 using namespace std;10 const int mxn=310;11 int read(){12 int x=0,f=1;char ch=getchar();13 while(ch<'0' || ch>'9'){ if(ch=='-')f=-1;ch=getchar();}14 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}15 return x*f;16 }17 int a[mxn][mxn];18 LL smm[mxn][mxn];19 int n,m;20 int ans=0;21 int f[mxn];22 LL st[mxn];23 int top=0;24 int find(LL x){25 int l=1,r=top,w=-1;26 while(l<=r){27 int mid=(l+r)>>1;28 if(st[mid]
0)ans=max(ans,(j-i+1)*k);49 else{50 int pos=find(tmp);51 if(pos!=-1)52 ans=max(ans,(k-f[pos])*(j-i+1));53 }54 if(tmp

 

转载于:https://www.cnblogs.com/SilverNebula/p/6067295.html

你可能感兴趣的文章
AndroidManifest.xml解析
查看>>
linux下磁盘分区详解
查看>>
利用iptables屏蔽IP段
查看>>
Oracle动态采样详解
查看>>
APUE读书笔记-03文件输入输出(4)
查看>>
linux系统中top命令输出详解
查看>>
cURL: Learning..
查看>>
540. Single Element in a Sorted Array(有序数组的 Single Element)(leetcode)
查看>>
Python输入输出练习,运算练习,turtle初步练习
查看>>
Codeforces Round #219 (Div. 1) A. Counting Kangaroos is Fun 【二分】
查看>>
Html基础
查看>>
wiki----为用户设置管理员权限
查看>>
Codeforces Round #565 (Div. 3) A. Divide it!
查看>>
《图像处理实例》 之 局部极值提取
查看>>
【leetcode】993. Cousins in Binary Tree
查看>>
java 常见几种发送http请求案例[转]
查看>>
更改Visual Studio 2010/2012/2008的主题设置
查看>>
win7系统安装hadoop
查看>>
day5作业购物商城+ATM
查看>>
day6作业--选课系统
查看>>