美文网首页DataStructure
单调栈-向右寻找比自己大的第一个数

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

作者: 雨落八千里 | 来源:发表于2019-06-10 23:59 被阅读0次

单调栈

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

#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;
}

相关文章

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

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

  • 算法进阶三

    单调栈的应用 单调栈的做法:找到每个数左边第一个比它大的数,右边第一个比它大的数串到它下面。 证明 :形成的不是森...

  • Swift 单调递减栈解决 K数 问题

    什么是单调栈? 1.单调递增栈: 栈顶 到 栈底 数据从小到大,遇到比栈顶大的数就弹栈 数据: [2, 1, 3,...

  • 常用技巧(二)

    栈 POJ 3250: Bad Hair Day题意:统计每个数字右边第一个比它大的数字与它的下标差的和。单调栈模...

  • 算法笔记——单调栈

    借鉴——单调栈总结/牛客网左神算法进阶班 基本问题 对于一个数组arr, 针对每个数,寻找它和它左 / 右边第一个...

  • 单调栈算法

    利用单调栈,可以找到从左/右遍历第一个比它小/大的元素的位置. 假设有一个单调栈S和一个数组a[5]; 有一个记录...

  • Largest Rectangle in Histogram (

    这道题运用了单调栈的思想。单调栈的用法是:用来找数组,左边或右边,第一个比当前元素小(或者大)的是谁。即inser...

  • 题解——单调栈

    单调栈题解 单调栈结构 牛客链接 方法:单调栈 算法 这里维护一个单调递增栈,可以找到比当前元素要小的元约定:当前...

  • 单调栈

    单调栈的特点就是从前往后遍历一遍O(n),使用栈存储信息,可以找到左边右边比它大的第一个数。 1.积雨水(42.T...

  • leetcode-0085

    题目 最大矩形 关键词: 单调栈 思路: 逐行按列累加'1'的个数,遇到0则清0,并逐行将下标入栈,保持栈内单调递...

网友评论

    本文标题:单调栈-向右寻找比自己大的第一个数

    本文链接:https://www.haomeiwen.com/subject/yratfctx.html