标签:洛谷 int top long Hair Bad 80010 ans 单调
看到这道题很容易想到单调栈,但我一开始想的是从后往前扫,但发现会有问题(因为这样会对后面牛的答案造成影响),所以这时我们要及时换一个思路,从前往后扫。
维护一个单调递减的栈,插入h[i]时,小等于它的数都要出栈,累加栈中元素数量,表示的意义就是:当前栈中的牛都是可以看到i这头牛的,即他们不会被i这头牛挡住。
1 #include<bits/stdc++.h> 2 using namespace std; 3 long long ans,h[80010]; 4 int s[80010],top,n; 5 6 int main(){ 7 cin>>n; 8 for(int i=1;i<=n;i++) cin>>h[i]; 9 for(int i=1;i<=n;i++){ 10 while(top!=0 && h[i]>=h[s[top]]) top--; 11 ans+=top; 12 s[++top]=i; 13 } 14 cout<<ans; 15 return 0; 16 }
一种思路不行时,要马上换一种思路。。。
标签:洛谷,int,top,long,Hair,Bad,80010,ans,单调 来源: https://www.cnblogs.com/yhxnoerror/p/16151781.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。