山峰(用栈就行)

该问题描述了一个计算快乐值的算法,基于给定的山峰高度数组,快乐值是登山者能从每个山峰看到的其他山峰数量之和。程序通过遍历和比较山峰高度来确定可视山峰的数量。
摘要由CSDN通过智能技术生成

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

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

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

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

输入

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

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

输出

仅一行:快乐值。

样例

样例输入1

5
2
1
3
5
9

样例输出1

5

提示

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

代码

#include <bits/stdc++.h>
using namespace std;
 int n,p,num;
 int a[20000],sum[20000];
 int main()
 {
    cin>>n;
    for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
    for(int i=2;i<=n;i++)
	{
        p=0;
        for(int j=i-1;j>0;j--)
        {
        	if(a[j]>p)
			{
				p=a[j];
				sum[i]+=1;
			}
		}
    }
    for(int i=1;i<=n;i++)
	{
		num+=sum[i];
	}
    cout<<num;
    return 0;
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值