首页 > 其他 > 详细

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

时间:2015-09-17 19:29:57      阅读:298      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!