• 1686: Bad Hair Day(单调栈)


    1686: Bad Hair Day 分享至QQ空间

    时间限制(普通/Java):2000MS/20000MS     内存限制:65536KByte
    总提交: 68            测试通过:31

    描述

     

    Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows that can see the top of other cows' heads.

    Each cow i has a specified height hi (1 ≤ h≤ 1,000,000,000) and is standing in a line of cows all facing east (to the right in our diagrams). Therefore, cow i can see the tops of the heads of cows in front of her (namely cows i+1, i+2, and so on), for as long as these cows are strictly shorter than cow i.

    Consider this example:

            =
    =       =
    =   -   =         Cows facing right -->
    =   =   =
    = - = = =
    = = = = = =
    1 2 3 4 5 6

    Cow#1 can see the hairstyle of cows #2, 3, 4
    Cow#2 can see no cow's hairstyle
    Cow#3 can see the hairstyle of cow #4
    Cow#4 can see no cow's hairstyle
    Cow#5 can see the hairstyle of cow 6
    Cow#6 can see no cows at all!

    Let ci denote the number of cows whose hairstyle is visible from cow i; please compute the sum of c1 through cN.For this example, the desired is answer 3 + 0 + 1 + 0 + 1 + 0 = 5.

    输入

    Line 1: The number of cows, N
    Lines 2..N+1: Line i+1 contains a single integer that is the height of cow i.

    输出

    Line 1: A single integer that is the sum of c1 through cN.

    样例输入

     

    6
    10
    3
    7
    4
    12
    2

    样例输出

     5

    题目来源

    USACO November 2006

    解题思路:  题目意思 第i个能看到知道比其大或者相等之前的所有牛!  维护一个单调递减的栈,如果新来的元素比栈顶元素小那栈中的元素都可以看到它 相反那之前的哪些都没用了 都被这个高的给挡住了!

     1 //
     2 #include <iostream>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <cstdio>
     6 #include <vector>
     7 using namespace std;
     8 
     9 typedef long long ll;
    10 const int N=80005;
    11 int sta[N];
    12 int n,d;
    13 ll res;
    14 
    15 int main(){
    16     ios::sync_with_stdio(false);
    17     int top=1;
    18     cin>>n;
    19     cin>>d;
    20     sta[1]=d;
    21     for(int i=2;i<=n;i++){
    22         cin>>d;
    23         while(d>=sta[top]&&top) top--;
    24         res+=top;  //在其前面的都能看到他
    25         sta[++top]=d;
    26     }
    27     cout << res << endl;
    28     return 0;
    29 }
    View Code
  • 相关阅读:
    Python中的sort()方法使用基础
    centos修改时区shanghai
    const 关键字修饰指针
    多主题
    多语言(国际化)
    动画
    字符编码
    .vscode/extensions.json 是项目用到的 插件 推荐列表,项目应该将此配置 写入用到的插件
    end_of_line = lf 选择行尾序列 .editorconfig 老项目不动代码存盘 文件变动 CRLF 的问题 vscode
    vetur 和 volar 不要一起装 vscode插件 已解决
  • 原文地址:https://www.cnblogs.com/qq-1585047819/p/11345172.html
Copyright © 2020-2023  润新知