1. 程式人生 > >[BZOJ1660][Usaco2006 Nov]Bad Hair Day 亂發節

[BZOJ1660][Usaco2006 Nov]Bad Hair Day 亂發節

維護 表示 sca for img limit line -- amp

1660: [Usaco2006 Nov]Bad Hair Day 亂發節

Time Limit: 2 Sec Memory Limit: 64 MB Submit: 1204 Solved: 589 [Submit][Status][Discuss]

Description

技術分享

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


輸入解釋:

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

Sample Output

5

3+0+1+0+1=5
單調棧維護一個身高遞減序列,註意是從n到1
#include <cstdio>
const int maxn = 80000 + 10;
int h[maxn], sta[maxn], top = 0;
int main(){
    int n;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) scanf("%d", h + i);
    h[n + 1] = 1 << 30;
    sta[top = 1] = n + 1;
    long long
ans = 0; for(int i = n; i; i--){ while(top && h[i] > h[sta[top]]) top--; ans += sta[top] - i - 1; sta[++top] = i; } printf("%lld\n", ans); return 0; }

[BZOJ1660][Usaco2006 Nov]Bad Hair Day 亂發節