ACM解題技巧 (單調棧) 題目總結

2021-09-24 04:20:43 字數 1780 閱讀 5418

單調是一種思想,當我們解決問題的時候發現有許多冗雜無用的狀態時,我們可以採用單調思想,用單調棧或類似於單調佇列的方法去除冗雜狀態,儲存我們想要的狀態題目傳送門hdu 1506 poj2559 最大矩形面積

思路:棧裡面去維護乙個長方形的高,保持這個單調遞增,遇到遞減,就出棧然後更新。。。

#include#include#include#include#include#include#include #include#include#include#include#include#include#include#include//#include //#include #include#include #include #define rsp(it,s) for(set::iterator it=s.begin();it!=s.end();it++)

#define inf_add 0x3f3f3f3f

#define mod 100000

#define pb push_back

#define mp make_pair

#define fi first

#define se second

#define pi acos(-1.0)

#define pii pair#define lson l, mid, rt<<1

#define rson mid+1, r, rt<<1|1

#define rep(i, x, y) for(register int i = x; i <= y; ++i)

#define repd(i, x, y) for(register int i = x; i >= y; --i)

#define file(s) freopen(s".in", "r", stdin), freopen(s".my", "w", stdout)

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pairp;

typedef pair pli;

typedef pair pil;

typedef pair pll;

const double eps = 1e-6;

template void chkmax(t &x, t y)

template void chkmin(t &x, t y)

templatevoid read(t &x)

while(ch>='0'&&ch<='9')

x=f?-x:x;

return;

}// hdu 1506

// 求矩形的面積 + 單調棧

// 記得開ll 還有n == 0 特判斷結束,不然wa

const int maxn = 1e5+10;

struct nodesa[maxn];

ll n, ans_area, cur_area, tot_w;

stackst;

void input()else

sa[i].w +=tot_w;

st.push(sa[i]);

}} //最後就是把單調棧的值更新就行

tot_w = 0;

cur_area = 0;

while(!st.empty())

printf("%lld\n",ans_area); }}

void solve()

int main()

python解題技巧 Python 解題技巧

python 解題技巧 一直都是用 c 和 c 解題,某題簡單解完後便心血來潮想用 python 解一次,發現一些問題,特寫此篇隨筆來記錄.一,輸入格式 例 輸入第 1 行給出正整數 n 和整數 m 第 2 行給出 n 個整數,其間以空格分隔.大多數題目都是要求一行給多個元素,其間以空格為間隔,而在...

Python解題技巧

python解題技巧 一直都是用c 和c解題,某題簡單解完後便心血來潮想用python解一次,發現一些問題,特寫此篇隨筆來記錄。例 輸入第1行給出正整數n和整數m 第2行給出n個整數,其間以空格分隔。大多數題目都是要求一行給多個元素,其間以空格為間隔,而在python中只用input 是不行的,若多...

數獨遊戲解題技巧

一直都有在玩數獨 一般難度的都能完成 可是高難度的就完全沒辦法了 好多累計玩了幾十小時都解不出 剛剛在網上看到這個介紹數獨技巧的帖子 真的很實用 不過方法太多 得慢慢消化。i 唯一數法 如果我們發現某個格仔中只有乙個可用候選數,那麼這個格仔必然是這個數字,這就是唯一數法 如下面例子,h5格仔中只有唯...