[Usaco2006 Nov]Bad Hair Day 乱发节
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
题解
- 单调栈
- 求每个数前面比他矮的,相当于算每个数对他后面比他高的贡献
- 80000*80000,QAQAQ,int64
var
t,x:array[0..80000]of longint;
i,j:longint;
n,top:longint;
ans:int64;
begin
readln(n);
for i:=1 to n do
readln(x[i]);
ans:=0;
for i:=1 to n do
begin
while (top>0)and(t[top]<=x[i]) do
dec(top);
inc(ans,top);
inc(top); t[top]:=x[i];
end;
writeln(ans);
end.