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;
    }
  • 相关阅读:
    docker 单kafka ,多分区
    spring data jpa + mysql使用json 类型
    C++ Multithread Tutorial
    GDB 调试程序
    C++ Project 积累(四)
    GDB 调试 C/C++ Project
    makefile 学习(一)
    Ubuntu 下配置 boost + eclipse
    C++ Project 积累(3)
    Leetcode Sudoku Solver
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998863.html
Copyright © 2011-2022 走看看