單調是一種思想,當我們解決問題的時候發現有許多冗雜無用的狀態時,我們可以採用單調思想,用單調棧或類似於單調佇列的方法去除冗雜狀態,儲存我們想要的狀態題目傳送門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格仔中只有唯...