您的位置:首页 > 大数据 > 人工智能

bzoj 1660: [Usaco2006 Nov]Bad Hair Day 乱发节(单调栈)

2016-05-03 08:20 666 查看

1660: [Usaco2006 Nov]Bad Hair Day 乱发节

Time Limit: 2 Sec Memory Limit: 64 MB

Submit: 881 Solved: 421

[Submit][Status][Discuss]

Description



Input

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

Output

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

Sample Input

6

10

3

7

4

12

2

输入解释:

六头牛排成一排,高度依次是 10, 3, 7, 4, 12, 2。

Sample Output

5

3+0+1+0+1=5

HINT

Source

Silver

[Submit][Status][Discuss]

题解:单调栈

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 100000
using namespace std;
int n,st
,a
,k
;
long long ans;
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d",&a[n-i+1]);
int cnt=0;
for (int i=1;i<=n;i++)
{
int t=0;
while (a[i]>a[st[cnt]]&&cnt)
k[i]+=k[st[cnt]]+1,cnt--;
st[++cnt]=i;
}
for (int i=1;i<=n;i++)
ans+=(long long)k[i];
printf("%lld\n",ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: