POJ - 3250 Bad Hair Day(单调队列/单调栈)
生活随笔
收集整理的這篇文章主要介紹了
POJ - 3250 Bad Hair Day(单调队列/单调栈)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目鏈接:點(diǎn)擊查看
題目大意:給出n只牛,高度參差不齊,所有的牛都朝向右邊,他們可以看到右邊所有沒有遮擋并且比自己低的牛,問每只牛可以看到的牛的數(shù)量總和是多少
題目分析:這個題目讓求每只牛看到的牛的數(shù)量,我們可以轉(zhuǎn)換一下,轉(zhuǎn)化成每只牛被看到過多少次,這樣就可以轉(zhuǎn)換成單調(diào)隊列/單調(diào)棧的題目了,大概就是維護(hù)一下當(dāng)前位置x之前有多少頭牛比自己高即可,很簡單的實(shí)現(xiàn),直接看代碼吧
代碼:
單調(diào)棧:
#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<list> #include<vector> #include<set> #include<map> #include<sstream> #include<deque> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=5e5+100;int main() { // freopen("input.txt","r",stdin); // ios::sync_with_stdio(false);int n;while(scanf("%d",&n)!=EOF){stack<int>st;LL ans=0;while(n--){int num;scanf("%d",&num);while(st.size()&&st.top()<=num)st.pop();ans+=st.size();st.push(num);}printf("%lld\n",ans);}return 0; }單調(diào)隊列:
#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<list> #include<vector> #include<set> #include<map> #include<sstream> #include<deque> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=5e5+100;int main() { // freopen("input.txt","r",stdin); // ios::sync_with_stdio(false);int n;while(scanf("%d",&n)!=EOF){deque<int>q;LL ans=0;while(n--){int num;scanf("%d",&num);while(q.size()&&q.back()<=num)q.pop_back();ans+=q.size();q.push_back(num);}printf("%lld\n",ans);}return 0; }?
總結(jié)
以上是生活随笔為你收集整理的POJ - 3250 Bad Hair Day(单调队列/单调栈)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷 - P1714 切蛋糕(单调队列+
- 下一篇: HDU - 3530 Subsequen