讨论 / 这样二分错在哪?
ssfzzsf 2010-02-24 07:07:00
点我顶贴 收藏 删除
var

ans,p,m,i,n,mid,l,r,t,k:longint;

a,data,b,f,g:array[0..100] of longint;

begin

{assign(input,'rq26.in');

reset(input);}

readln(n);

for i:=1 to n do

begin

read(data[i]);t:=data[i];

if t>f[m] then begin inc(m);f[m]:=t;a[i]:=m;end

else begin l:=0;r:=m;while l<r do

begin

mid:=(l+r) shr 1;

if t>=f[mid] then

l:=mid+1

else

r:=mid;

end;f[l]:=t;a[i]:=l;end;

end;

for i:=n downto 1do

begin

t:=data[i];

if t>g[p] then begin inc(p);g[p]:=t;b[i]:=p;end

else begin l:=0;r:=p;while l<r do //f inc

begin

mid:=(l+r) shr 1;

if t>=g[mid] then

l:=mid+1

else

r:=mid;

end;g[l]:=t;b[i]:=l;end;

end;

ans:=maxlongint;

for i:=1 to n do

if n-(a[i]+b[i])<ans then ans:=n-(a[i]+b[i]);

writeln(ans+1);

end.

#1 ssfzzsf@2010-02-24 07:07:00
回复 删除
= =第15行改为if t>f[mid] then
查看更多回复
提交回复