zoukankan      html  css  js  c++  java
  • 单调栈

    单调栈

    算法思想:

    • 常用场景:给定一个序列,求一下序列中每一个数左边(右边)离他最近的且比他小(大)的数是几
    • 先以暴力做法即双重循环i,j,发现规律:在i指针往右走的同时压栈。依据原则:如果x<y并且a[x]>=a[y],那么显然a[x]不可能作为答案输出来,因为假设如果a[x]满足条件,那么a[y]则理应会先被找到。这样依据这个原则,在压栈的时候进行比较,能保证栈是严格单调递增的。

    代码实现:

    const int N=100010;
    stack<int> st;
    int main()
    {
    	int n;
    	cin>>n;
        for(int i=0;i<n;i++)
        {
            int x;
            scanf("%d",&x);
            while(!st.empty()&&st.top()>=x) st.pop();
            if(st.empty())  printf("-1 ");
            else    printf("%d ",st.top());
            st.push(x);
        }
    	return 0;
    } 
    
  • 相关阅读:
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日博客
    每日博客
    结对作业之全国疫情统计可视化地图
    每日博客
  • 原文地址:https://www.cnblogs.com/codertea/p/13370962.html
Copyright © 2011-2022 走看看