zoukankan      html  css  js  c++  java
  • [JZOJ1264] 乱头发节

    Description

      农民John的某 N 头奶牛 (1 <= N <= 80,000) 正在过乱头发节!由于每头牛都意识到自己凌乱不堪的发型,FJ 希望统计出能够看到其他牛的头发的牛的数量。   每一头牛 i有一个高度 h[i] (1 <= h[i] <= 1,000,000,000)而且面向东方排成一排(在我们的图中是向右)。因此,第i头牛可以看到她前面的那些牛的头,(即i+1, i+2,等等),只要那些牛的高度严格小于她的高度。
           每一头牛 i有一个高度 h[i] (1 <= h[i] <= 1,000,000,000)而且面向东方排成一排(在我们的图中是向右)。因此,第i头牛可以看到她前面的那些牛的头,(即i+1, i+2,等等),只要那些牛的高度严格小于她的高度。

    Input

      Line 1: 牛的数量 N。
      Lines 2..N+1: 第 i+1 是一个整数,表示第i头牛的高度。

    Output

      Line 1: 一个整数表示c[1] 至 c[N]的和。

    Sample Input

      6
      10
      3
      7
      4
      12
      2

    Sample Output

      5

    Summary

      维护一条单调栈,如果出现了比栈中高的奶牛,那么这头奶牛就看不到之后的的奶牛,对答案失去了贡献。

     1 #include<cstdio>
     2 using namespace std;
     3 int n,tot;
     4 long long a[100000],d[100000],ans;
     5 int main()
     6 {
     7     scanf("%d",&n);
     8     for (int i=1;i<=n;i++)
     9     {
    10         scanf("%d",&a[i]);
    11         while (tot!=0&&d[tot]<=a[i])
    12             tot--;
    13         d[++tot]=a[i];
    14         ans=ans+tot-1;
    15     }
    16     printf("%lld",ans);
    17 }
    View Code
  • 相关阅读:
    Gym 100818F Irrational Roots (数学)
    学习总结 for循环--冒泡排序
    学习总结 for循环语句的应用
    学习总结 条件语句的应用
    学习总结 运算符了解与应用
    学习记录 彻底搞清 C#中a++与++a的区别
    学习总结 数据类型的应用与转换
    学习总结 数据类型
    学习总结 二进制转换与应用
    学习总结 vs软件简单了解
  • 原文地址:https://www.cnblogs.com/Tokisaki-Kurumi/p/9325978.html
Copyright © 2011-2022 走看看