2019牛客第八場(chǎng)A題 (All-one Matrices) 單調(diào)棧

題意:給一個(gè)01矩陣单雾,求其中極大全1子矩陣的個(gè)數(shù)赚哗,極大指的是這個(gè)矩陣不能再往擴(kuò)展。

題解:枚舉每個(gè)子矩陣的底邊硅堆,維護(hù)一個(gè)單調(diào)棧(嚴(yán)格遞增)屿储。

紅色柱子代表?xiàng)V性兀{(lán)色表示即將刪除的元素

如上圖所示渐逃,棧中維護(hù)往上拓展的高度up和以這一塊為最右端往左擴(kuò)展的位置pos够掠。顯然pos是左邊第一個(gè)大于等于自己高度up的值,在push的過程中會(huì)一直等于這條柱子自己的位置茄菊。此外由于我們考慮的是每個(gè)矩陣的底邊疯潭,而如果當(dāng)前行的下一行仍然為1赊堪,則說明矩陣能往下擴(kuò)展,跳過這些情況竖哩。

被彩色粗線框起來的是合法矩形

維護(hù)最后一個(gè)不能往下擴(kuò)展的格子ma哭廉,每次pop的柱子如果它的pos小于等于ma,則說明我們能找到一個(gè)以當(dāng)前枚舉的行為底邊的極大子矩陣相叁。

往上拓展的高度up這個(gè)值可以通過類似前綴和的操作預(yù)處理遵绰。從而總復(fù)雜度O(nm)

#ifdef ONLINE_JUDGE
#include <bits/stdc++.h>
#endif
using namespace std;
using pii = pair<int, int>;
const int maxn = 3005;
char g[maxn][maxn];
int sum[maxn][maxn];

int main()
{
    ios::sync_with_stdio(false);
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; I++)
    {
        cin >> (g[i] + 1);
    }
    for (int i = 1; i <= n; I++)
    {
        for (int j = 1; j <= m; j++)
        {
            if (g[i][j] == '1')
                sum[i][j] = sum[i - 1][j] + 1;
        }
    }
    int ans = 0;
    for (int i = 1; i <= n; I++)
    {
        stack<pii> s;
        int ma = -1;
        for (int j = 1; j <= m + 1; j++)
        {
            int pos = j;
            while (!s.empty() && s.top().first > sum[i][j])
            {
                if (s.top().second <= ma)
                {
                    ans++;
                }
                pos = s.top().second;
                s.pop();
            }
            if (!sum[i + 1][j])
                ma = j;
            if (sum[i][j] && (s.empty() || s.top().first < sum[i][j]))
            {
                s.emplace(sum[i][j], pos);
            }
        }
    }
    cout << ans << endl;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市增淹,隨后出現(xiàn)的幾起案子椿访,更是在濱河造成了極大的恐慌,老刑警劉巖虑润,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件成玫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡端辱,警方通過查閱死者的電腦和手機(jī)梁剔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舞蔽,“玉大人荣病,你說我怎么就攤上這事∩粒” “怎么了个盆?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)朵栖。 經(jīng)常有香客問我颊亮,道長(zhǎng),這世上最難降的妖魔是什么陨溅? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任终惑,我火速辦了婚禮,結(jié)果婚禮上门扇,老公的妹妹穿的比我還像新娘雹有。我一直安慰自己,他們只是感情好臼寄,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布霸奕。 她就那樣靜靜地躺著,像睡著了一般吉拳。 火紅的嫁衣襯著肌膚如雪质帅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音煤惩,去河邊找鬼嫉嘀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盟庞,可吹牛的內(nèi)容都是我干的吃沪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼什猖,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼票彪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起不狮,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤降铸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后摇零,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體推掸,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年驻仅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谅畅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡噪服,死狀恐怖毡泻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粘优,我是刑警寧澤仇味,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站雹顺,受9級(jí)特大地震影響丹墨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嬉愧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一贩挣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧没酣,春花似錦王财、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狭握。三九已至闪金,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哎垦。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工囱嫩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漏设。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓墨闲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親郑口。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸳碧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348