codevs 1531 山峰
题目描述 Description

Rocky山脉有n个山峰,一字排开,从西向东依次编号为1, 2, 3, ……, n。每个山峰的高度都是不一样的。编号为i的山峰高度为hi。

小修从西往东登山。每到一座山峰,她就回头观望自己走过的艰辛历程。在第i座山峰,她记录下自己回头能看到的山峰数si。

何谓“能看到”?如果在第i座山峰,存在j<k<i,hj<hk,那么第j座山峰就是不可见的。除了不可见的山峰,其余的山峰都是可见的。

回家之后,小修把所有的si加起来得到S作为她此次旅行快乐值。现在n座山峰的高度都提供给你了,你能计算出小修的快乐值吗?

输入描述 Input Description

第一行一个整数n(n<=15000)。

第i+1(1<=i<=n)行是一个整数hi(hi<=109)。

输出描述 Output Description

仅一行:快乐值。

样例输入 Sample Input

5

2

1

3

5

9

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

说明:s1=0, s2=1, s3=2, s4=1, s5=1。

维护一个单调递减的栈stack[]。

设当前元素为x,栈顶元素为k,栈顶指针为top,ans为到目前为止所能看到的山峰总数

如果x<k,ans+=top,x入栈。这座山比栈顶存的山低,那么由于栈从底部到顶部递减,所以此时栈内有几座山,就能看到几座山。

如果x=k,ans+=top,这座山和栈顶的山高度相同,设栈顶能看到y座山,在这座山就能看到y+1座山(加上的是栈顶这座山),也就是栈内所有的山。

如果x>k,1、ans+=top这座山比栈顶的山高,由于栈从栈底到栈顶单调递减,所以这座山比栈内所有的山高,可以看到所有的山。

2、由于这座山很高,所以会遮挡后面的视线,所以要维护栈的单调性,也就是从栈顶开始,如果这座山比栈顶的山高,栈顶退栈,直至退到这座山比栈顶的山低为止,x再入栈。

由此可以看出,对于每一个位置,都可以看到当前栈内所有的山,所以直接枚举,ans+=top

#include<cstdio>
#include<iostream>
using namespace std;
int stack[15001],top;
int n,ans,x;
int init()//读入优化,也可以直接输入
{int x=0;char c=getchar();while(c<'0'||c>'9') c=getchar();while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return x;
}
int main()
{n=init();for(int i=1;i<=n;i++){x=init();ans+=top;if(x<stack[top-1]) stack[top++]=x;//这座山比栈顶的山低 else if(x>stack[top-1])//这座山比栈顶的山高
        {while(top&&x>stack[top-1])    top--;//维护单调性 stack[top++]=x;}}printf("%d",ans);
}

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/6218630.html

codevs 1531 山峰相关推荐

  1. [ CodeVS冲杯之路 ] P1116

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1116/ 数据很小,DFS可A,每层枚举颜色,判断相邻的点是否有重复的颜色,记得回溯时把颜色染回0,即无颜色 这里我使用 ...

  2. 【贪心】【codevs】1214 线段覆盖

    http://codevs.cn/problem/1214/ 我去这个题...wa的我都没脾气了... 我写while(~scanf("%d", &n))竟然是不对的... ...

  3. [codevs 1913] 数字梯形问题

    [codevs 1913] 数字梯形问题 题解: 本题就是加强版的 [codevs 1033] 蚯蚓的游戏问题. 分别针对三个规则建图.运行最小费用最大流. 规则1:从梯形的顶至底的m条路径互不相交. ...

  4. 关于机器学习中山峰聚类算法的说明

    前言 在之前关于聚类算法的文章中,笔者主要涉及的内容均是和参数求解相关的,如C均值(包括模糊C均值).混合高斯模型等,而对于一些无参数密度估计的算法尚未讨论,而且一般基于参数密度估计的算法均是建立在假 ...

  5. 栈与队列10——可见的山峰对数量

    题目 一个不含有负数的数组可以代表一圈环形山,每个位置的值代表山的高度.有两个方向:next方向(逆时针方向),last 方向(顺时针). 山峰A和山峰B相互看见的条件为: 如果A和B是同一座山,认为 ...

  6. codevs 1002 搭桥

    codevs 第一道题 先贴描述 1002 搭桥  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description 有一矩 ...

  7. bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞

    没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...

  8. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  9. codevs 1376 帕秋莉•诺蕾姬

    codevs 1376 帕秋莉•诺蕾姬 题目描述 Description 在幻想乡,帕秋莉•诺蕾姬是以宅在图书馆闻名的魔法使.这一天帕秋莉又在考虑如何加 强魔法咒语的威力.帕秋莉的魔法咒语是一个仅有大 ...

最新文章

  1. 如何保证IM实时消息的“时序性”与“一致性”?
  2. Show Attend and Tell的实现代码中的python知识学习
  3. java实现登陆面试题_【Javaweb】笔面试题 ---(1)(示例代码)
  4. 软件设计原则(七)合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)
  5. P2634 [国家集训队]聪聪可可
  6. 第七章 scikit-learn与机器学习实战
  7. 周末,说下我喜欢的篮球
  8. 高性能全数字嵌入式仿真测试软件SkyEye支持多达70余种核心
  9. error: Pulling is not possible because you have unmerged files
  10. 如何迅速定位***路由器故障
  11. SolarWinds 供应链攻击中的第四款恶意软件及其它动态
  12. HGE引擎写的俄罗斯方块程序(附vc源码)[r]
  13. centos7 install pip
  14. 软件基本功:linux/windows的头文件互相包含,大哥你这是什么创新?
  15. 360浏览器Linux版内核,360浏览器推出Linux版下载,主要特性解说
  16. PS基础,灰度色彩模式
  17. java求解二元二次方程_二元二次方程的解法
  18. 嵌入式linux驱动-LCD液晶屏驱动
  19. 用纸筒做机器人_怎样用纸盒做机器人
  20. mysql(.msi)下载、安装及配置教程

热门文章

  1. 程序员正在消失!90%的人都不知道,写不出好代码,是输在了这点上!
  2. 业务代码解构利器--SWAK
  3. 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
  4. mysql字段中去掉括号
  5. 苏宁Nodejs性能优化实战
  6. Python基础学习之 函数
  7. SpringMVC_实现简单的增删改查
  8. php 不可以连接远程mysql数据库
  9. 让Linux系统开机速度更快的方法
  10. GitHub的MySQL高可用性实践