【單調(diào)椫荆】【前綴和】【二分查找】8.28題解-long

long


題目描述

AP神牛準備給自己蓋一座很華麗的宮殿。于是鄙才,他看中了一塊N*M的矩形空地颂鸿。空地中每個格子都有自己的海拔高度攒庵。AP想讓他的宮殿的平均海拔在海平面之上(假設(shè)海平面的高度是0嘴纺,平均數(shù)都會算吧?)浓冒。而且栽渴,AP希望他的宮殿盡量大,能夠容納更多的人來膜拜他稳懒。請問AP的宮殿最后會有多大闲擦?

輸入輸出

輸入
第一行為N和M。之后N行僚祷,每行M個數(shù)佛致,描述的空地的海拔贮缕。
輸出
輸出一行,表示宮殿最大面積辙谜。

樣例

樣例輸入

3 2
4 0
-10 8
-2 -2

樣例輸出

4

說明

數(shù)據(jù)范圍
對于30%的數(shù)據(jù),N,M≤50;
對于100%的數(shù)據(jù)感昼,N,M≤200装哆;

思路

  1. 用前綴和a[i][j]表示第i行1~j列的和
  2. 開一個單調(diào)棧,存海拔之和
  3. a[k][j]-a[k][q]代表第k行第q列到第j列的海拔高度和
  4. 當s<0時定嗓,設(shè)s=p (p<0),在棧中尋找p所對應(yīng)的f[p],
  5. 用當前行數(shù)k減去f[p]蜕琴,即可得到一段平均海拔在海平面之上的區(qū)間。

代碼

#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;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宵溅,一起剝皮案震驚了整個濱河市凌简,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恃逻,老刑警劉巖雏搂,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藕施,死亡現(xiàn)場離奇詭異,居然都是意外死亡凸郑,警方通過查閱死者的電腦和手機裳食,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芙沥,“玉大人诲祸,你說我怎么就攤上這事《颍” “怎么了救氯?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長歌憨。 經(jīng)常有香客問我径密,道長,這世上最難降的妖魔是什么躺孝? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任享扔,我火速辦了婚禮,結(jié)果婚禮上植袍,老公的妹妹穿的比我還像新娘惧眠。我一直安慰自己,他們只是感情好于个,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布氛魁。 她就那樣靜靜地躺著,像睡著了一般厅篓。 火紅的嫁衣襯著肌膚如雪秀存。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天羽氮,我揣著相機與錄音或链,去河邊找鬼。 笑死档押,一個胖子當著我的面吹牛澳盐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播令宿,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叼耙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粒没?” 一聲冷哼從身側(cè)響起筛婉,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎癞松,沒想到半個月后爽撒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冕碟,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年匆浙,在試婚紗的時候發(fā)現(xiàn)自己被綠了安寺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡首尼,死狀恐怖挑庶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情软能,我是刑警寧澤迎捺,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站查排,受9級特大地震影響凳枝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜跋核,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一岖瑰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砂代,春花似錦蹋订、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捶箱,卻和暖如春智什,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丁屎。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工荠锭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悦屏。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓节沦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親础爬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容