BZOJ 1628 [Usaco2007 Demo]City skyline:单调栈
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ 1628 [Usaco2007 Demo]City skyline:单调栈相关的知识,希望对你有一定的参考价值。
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1628
题意:
题解:
单调栈。
单调性:
栈内元素高度递增。
一旦出现比栈顶小的元素,则表明一栋房子的结束。
入栈:
如果出现了一个新的高度b(栈中没有),则入栈。
表明从现在开始,一定有一栋高度为b的房子,只是我们不知道它在哪里结束而已。
出栈:
对于现在的高度b,将栈中所有高度 > b的元素都出栈。
因为此时比b高的房子不得不结束。
每出栈一个元素,ans++。
注:最后要再多算一次b = 0,确保将最后一栋房子出栈。
AC Code:
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #include <stack> 5 6 using namespace std; 7 8 int n,w; 9 int ans=0; 10 stack<int> stk; 11 12 int main() 13 { 14 cin>>n>>w; 15 int a,b; 16 for(int i=0;i<=n;i++) 17 { 18 if(i<n) cin>>a>>b; 19 else b=0; 20 while(!stk.empty() && stk.top()>b) 21 { 22 stk.pop(); 23 ans++; 24 } 25 if(stk.empty() || stk.top()!=b) stk.push(b); 26 } 27 cout<<ans<<endl; 28 }
以上是关于BZOJ 1628 [Usaco2007 Demo]City skyline:单调栈的主要内容,如果未能解决你的问题,请参考以下文章
bzoj1629 [Usaco2007 Demo]Cow Acrobats
bzoj2023[Usaco2005 Nov]Ant Counting 数蚂蚁*&&bzoj1630[Usaco2007 Demo]Ant Counting*
bzoj1630/2023 [Usaco2007 Demo]Ant Counting
BZOJ 1695 [Usaco2007 Demo]Walk the Talk 链表+数学
刷水-贪心BZOJ1629-[Usaco2007 Demo]Cow Acrobats
bzoj1640[Usaco2007 Nov]Best Cow Line 队列变换*&&bzoj1692[Usaco2007 Dec]队列变换*