单调栈-向右寻找比自己大的第一个数

单调栈#

向右寻找比自己大的第一个数
poj 3250 Bad Hair Day

Copy
#include<iostream> #include<cstdio> #include<stack> #define M 80100 #define ll long long using namespace std; ll a[M]; int L[M]; stack<ll>s; int main( ) { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } for(int i=n;i>=1;i--) { while(!s.empty( )&&a[s.top( )]<a[i]) { s.pop( ); } if(s.empty( )) { L[i]=n+1; } else { L[i]=s.top( ); } s.push(i); } /*for(int i=1;i<=n;i++) { cout<<L[i]<<" "; } cout<<endl;*/ ll ans=0; for(int i=1;i<=n;i++) { ans+=(L[i]-i-1); } cout<<ans<<endl; return 0; }
posted @   私の目を見て  阅读(142)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用
点击右上角即可分享
微信分享提示
CONTENTS

""