islands

题目描述

每当下雨时,FJ的牧场都会进水。由于牧场地面高低不平,被水淹没的地方不是很统一,形成一些岛屿。 



FJ
的牧场可描述成一个一维的地形图,由N(1 <= N <= 100,000)个彼此相连的柱状的高度值组成。高度值为H(1)...H(n)。假定这个地形图的两端有两条无限高的墙围着。 



当雨一直下时,地形图上最低的区域先被水淹没,形成一些不相邻的岛屿。一旦水面高度到达一个区域的高度,则认为这个区域被淹没。 




左图,在当前水面时,有4个岛屿。右图,在水面升高后,剩下2个岛屿。显然,最终所有的区域都会沉入水面。


算出当雨从开始下到最后所有岛屿沉入水中,最多时可形成多少个岛屿。 





输入

1行:1个整数

2..N+1行:每行一个整数,表示一个区域的高度H(i). (1 <= H(i) <= 1,000,000,000) 


输出

1: 1个整数,表示最多时能看到的岛屿数


样例输入
8 

3 

5 

2 

3 

1 

4 

2 

3

样例输出
4

数据范围限制

uses math;
var
   v:array [0..100000,1..3] of longint;
   i,j,a,b,c,ans,ans1:longint;
procedure ss(l,r:longint);
var
   i,j,mid:longint;
begin
    i:=l; 
    j:=r;
    mid:=v[(l+r) div 2,1];
    while i<j do 
    begin
        while (v[i,1]<mid) do inc(i);
        while (v[j,1]>mid) do dec(j);
        if i<=j then
        begin
               v[0,1]:=v[i,1];
	       v[i,1]:=v[j,1];
	       v[j,1]:=v[0,1];
               v[0,2]:=v[i,2];
	       v[i,2]:=v[j,2];
	       v[j,2]:=v[0,2];
               inc(i); 
               dec(j);
        end;
    end;
    if i<r then ss(i,r);
    if l<j then ss(l,j);
end;
begin
     assign(input,'islands.in'); reset(input);
     assign(output,'islands.out'); rewrite(output);
     readln(a);
     for i:=1 to a do
     begin
              read(c);
              if (c<>v[b,3]) then
              begin
                     inc(b);
                     v[b,3]:=c;
                     v[b,2]:=b;
               end;
     end;
     for i:=0 to 100000 do 
          v[i,1]:=v[i,3];
     ans:=1;
     ss(1,b);
     for i:=1 to b do
     begin
            if (v[v[i,2]-1,3]>v[v[i,2],3])and(v[v[i,2]+1,3]>v[v[i,2],3])then 
				inc(ans);
           	if (v[v[i,2]-1,3]<=v[v[i,2],3])and(v[v[i,2]+1,3]<=v[v[i,2],3])then 
				dec(ans);
            ans1:=max(ans1,ans);
     end;
     writeln(ans1);
     close(input); 
     close(output);
end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值