码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-09-17 19:32:24      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

 

还是单调栈,维护递减即可,在进行计算,注意要保存前一个比当前数大的数之前有几个比它小。

 1 var n,i,j,num,now,tem:longint;
 2 ans:int64;
 3 stack:array[0..1000001] of longint;
 4 h,l:array[0..1000001] of longint;
 5 begin
 6   readln(n);
 7   for i:=1 to n do
 8     readln(h[i]);
 9   now:=0;
10   ans:=0;
11   //fillchar(l,sizeof(l),1);
12   for i:=1 to n do
13     l[i]:=1;
14   for i:=n downto 1 do
15     begin
16       while (h[i]>stack[now]) and (now<>0) do dec(now);
17       inc(now);
18       stack[now]:=h[i];
19       ans:=ans+n+1-i-now-l[now-1];
20       l[now]:=n+1-i-now;
21     end;
22   write(ans);
23 end.

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

标签:

原文地址:http://www.cnblogs.com/Kalenda/p/4816967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!