洛谷P1565 牛宫

洛谷P1565 牛宫

题目描述

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

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

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

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例:

3 2
4 0
-10 8
-2 -2

输出样例:

4

题意很简单,求最大子矩阵和,且该矩阵和大于等于0。

输入时顺便做前缀和,然后是用三重循环枚举矩阵的长和宽,分别是宽的起始到宽的结束和长。

当当前矩阵与上一个矩阵相加大于0时,可直接得到一个新的矩阵并更新答案;

所以这道题最终要解决的是如何处理当前矩阵与上一个矩阵相加小于0的情况。

易知每个矩阵都可被纵向分割为两个小矩阵,那么就可以用二分查找,看当前矩阵和上一个矩阵组成的新矩阵是否能被分割成这样两个矩阵:一个矩阵和小于0,另一个大于0;

如果可以找到,那么更新答案;

因为宽始终不变,所以还需记录下小于0的那个矩阵的长,再用新矩阵的长减去即可;

最后要注意每次记录下矩阵和小于0的值和该矩阵的长,用单调栈记录。

/*由于某些原因,我全开了long long*/
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
long long n,m,ans;
long long top,sta[222222];
long long s[222][222],area;
long long a[222][222],kn[222222],f2[222][222];
long long ef(long long x)//二分查找出当前矩阵所包含的最小的小于0的矩阵
{
     long long l=1,r=top,mid,ans1=-1;
     while(l<=r)
     {
        mid=(l+r)/2;
        if(sta[mid]<x)
        {
            r=mid-1;ans1=mid;
        }
        else l=mid+1;
     }
     return ans1;
}
int main()
{
   scanf("%lld%lld",&n,&m);
   for(long long i=1;i<=n;i++)
   for(long long j=1;j<=m;j++)
   {
      scanf("%lld",&a[i][j]);
      s[i][j]=a[i][j]+s[i][j-1];//前缀和
   }
   for(long long i=1;i<=m;i++)//枚举起始宽
   for(long long j=i;j<=m;j++)//枚举结束宽
   {
      area=0;
      sta[0]=0,top=0;
      for(long long k=1;k<=n;k++)//枚举长
      {
         area+=s[k][j]-s[k][i-1];
         if(area>0)  ans=max(ans,(j-i+1)*k);
         else
         {
             long long num=ef(area);//矩阵和
             if(num!=-1)  ans=max(ans,(j-i+1)*(k-kn[num]));//找到了新矩阵所包含的大于0的矩阵才更新
             if(area<sta[top])
             {
                 sta[++top]=area;//记录area<0的值
                kn[top]=k;//同时记录该矩阵的长
              }
         }
      }
   }
   cout<<ans<<endl;
   return 0;
}
时间: 2024-10-19 22:04:44

洛谷P1565 牛宫的相关文章

洛谷1522 牛的旅行

本题地址:http://www.luogu.org/problem/show?pid=1522 题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个牧场了. John想在牧场里添加一条路径(注意,恰好一条).对这条路径有以下限制: 一个牧场的直径就是牧场中最远的两个牧区的距离(本题中所提到的所有距离指的都是最短的距离).考虑如下的有5个牧区的牧场,牧

洛谷P1522牛的旅行——floyd

题目:https://www.luogu.org/problemnew/show/P1522 懒于仔细分情况而直接像题解那样写floyd然后不明白最后一步max的含义了... 分开考虑怎么保证在一个内呢?如果新连边的min与原直径的max在三个连通块里怎么办? 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; dou

洛谷P3045 [USACO12FEB]牛券Cow Coupons

P3045 [USACO12FEB]牛券Cow Coupons 71通过 248提交 题目提供者洛谷OnlineJudge 标签USACO2012云端 难度提高+/省选- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 86分求救 题目描述 Farmer John needs new cows! There are N cows for sale (1 <= N <= 50,000), and FJ has to spend no more than his budget

洛谷——P1821 [USACO07FEB]银牛派对Silver Cow Party

P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads co

洛谷P3941入阵曲

洛谷P3941入阵曲 [题目描述] 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 小 F 很喜欢数学,但是到了高中以后数学总是考不好. 有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识算法竞赛的 时候,觉得整个世界都焕然一新.这世界上怎么会有这么多奇妙的东西?曾经自己觉得难以 解决的问题,被一个又一个算法轻松解决. 小 F 当时暗自觉得,与自己的幼稚相比起来,还有好多要学习的呢. 一年过去了,想想都还有点恍惚. 他至今还能记得,某天晚上听着入阵曲,激动地睡不着觉,写题写到

洛谷 P1886 滑动窗口

题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array is [1 3 -1 -3 5 3 6 7], and k = 3. 输入输出格式 输入格式: 输入一共有两行,第一行为n,k. 第二行为n个数(<INT_MAX). 输出格式: 输出共两行,第一行为每次窗口滑动的最小值 第二行为每次窗口滑动的最大值 输入输出样例 输入样例#1: 8 3 1 3 -1 -

洛谷P1519 穿越栅栏 Overfencing

P1519 穿越栅栏 Overfencing 69通过 275提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 USACO是100分,洛谷是20分 为什么只有十分 题目描述 描述 农夫John在外面的田野上搭建了一个巨大的用栅栏围成的迷宫.幸运的是,他在迷宫的边界上留出了两段栅栏作为迷宫的出口.更幸运的是,他所建造的迷宫是一个“完美的”迷宫:即你能从迷宫中的任意一点找到一条走出迷宫的路.给定迷宫的宽度W(1<=W<=38)及高度H(1<=H&

洛谷1828 香甜的黄油

洛谷1828 香甜的黄油 本题地址:http://www.luogu.org/problem/show?pid=1828 题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费用在奶牛上. 农夫John很狡猾.像以前的Pavlov,他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的牧场.他打算将糖放在那里然后下午发出铃声,以至他可以在晚上挤奶. 农夫Joh

洛谷P2866 [USACO06NOV]糟糕的一天Bad Hair Day

P2866 [USACO06NOV]糟糕的一天Bad Hair Day 75通过 153提交 题目提供者洛谷OnlineJudge 标签USACO2006云端 难度普及/提高- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 题目标题 题目描述 Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her