單調棧2 POJ3250 類似校內選拔I題

2022-03-17 20:02:45 字數 1407 閱讀 2926

這個題再次證明了單調棧的力量

簡單 單調棧 類似上次校內選拔消磚塊

一堆牛面朝右排 給出從左到右的 問每個牛的能看到前面牛髮型的個數之和

//re原因 因為在執行pop的時候沒有判斷empty 程式崩潰

轉換下思想 我們可以求每個牛被後面的牛看見的次數之和

維護乙個單調減棧 size為能看到當前準備入棧的髮型的牛個數

so 解決了 **超短

1 #include2 #include3

//#include

4 #include5 #include6 #include7 #include8 #include9 #include10 #include11 #include12 #include13

#define pi acos(-1.0)

14#define inf 0x3f3f3f3f

15using

namespace

std;

16 typedef long

long

ll;17

typedef __int64 int64;

18const ll mood=1e9+7;19

const int64 mod=998244353;20

const

double eps=1e-9;21

const

int n=2e7+10;22

const

int maxn=1e5+5

;23 inline void rl(ll&num)

26while(ch>='

0'&&ch<='

9')num=num*10+ch-'

0',ch=getchar();

27 num*=f;28}

29 inline void ri(int &num)

32while(ch>='

0'&&ch<='

9')num=num*10+ch-'

0',ch=getchar();

33 num*=f;34}

35int getnum()//

相鄰的個位整數輸入 如想分別儲存1234 輸入連續的1234 a[i]=getnum();就可以實現

3642 inline void

out(int x)if(x>9) out(x/10); putchar(x%10+'0'

); }

43int

main()

4457

else

61 ans+=s.size()-1;62

}63 cout

64while(!s.empty())s.pop();65}

66return0;

67 }

ac**

POJ 3250 單調棧模板

題意 從左右給你n頭都面向右牛的高度,每頭牛能被左邊的牛看到當且僅當自己的身高比他低且中間沒有障礙物 求每頭牛能看到的牛數量之和 include include include include include include include include include include inclu...

單調棧應用POJ3250 單調序列

參考 單調棧,顧名思義,是棧內元素保持一定單調性 單調遞增或單調遞減或是其他性質 的棧。我們假如有這樣乙個問題 poj3250 給定一組數,針對每個數,尋找它和它右邊第乙個比它大的數之間有多少個數。如果用樸素的解法就會是雙層for迴圈遍歷,時間複雜度達到o n 2 利用單調棧思想的解法則會降至限行時...

poj3250(單調棧模板題)

題意 求序列中每個點右邊第乙個 自身的點的下標。思路 簡單介紹單調棧,主要用來求向左 右第乙個小於 大於自身的下標,直接求的話複雜度為o n2 而單調棧只有o n 利用好單調棧十分有用。乙個元素向左遍歷的第乙個比它小的數的位置就是將它插入單調棧時棧頂元素的值,若棧為空,則說明不存在這麼乙個數。然後將...