zoukankan      html  css  js  c++  java
  • 糟糕的一天【栈】

    题目大意:

    n头奶牛排成一列,后面的奶牛可以看见前面比它矮的,切没有被更高奶牛挡住的牛。求所有奶牛一共可以看见多少头奶牛?


    思路:

    很明显,这道题是一个单调栈。
    啥?你问我单调栈是啥?不就是单调的栈吗。
    将奶牛一个一个进栈,同时保证栈里面的数字单调递减(后面必须看得见前面),每次进栈之后求出最后面一头牛能看见前面的牛的数量,输出答案即可。
    时间复杂度:O(n)


    代码:

    #include <cstdio>
    #include <iostream>
    #define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
    using namespace std;
    
    long long s[100011],n,a[100011],sum,tail;
    
    int main()
    {
        fre(badhair);
        cin>>n;
        tail=0;
        a[0]=1e17;
        for (long long i=1;i<=n;i++)
         cin>>a[i];
        for (long long i=1;i<=n;i++)
        {
            while (a[i]>=s[tail]&&tail) tail--;  //模拟栈(可以用queue)
            tail++; 
            s[tail]=a[i];  //进栈
            sum=sum+tail-1;  //求出答案
        }
        cout<<sum<<"\n";
        return 0;
    }
  • 相关阅读:
    12.Django与ajax
    11.Django的分页器paginator
    10.中间键Middleware
    09.用户认证auth模块
    08.form组件
    07.会话跟踪技术cookie与session
    06.orm模型层
    05.Django模板层
    04.Django视图函数
    03.DjangoURL路由
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998864.html
Copyright © 2011-2022 走看看