program mountain;
Uses sysutils, Math;
const
MAXN = 100005;
Type elenco= Array of LongInt;
var
ANS, N, i, j, id, maxMountainLength, lung, len : LongInt;
P, leftLIS, rightLIS : Array[0..MAXN-1] of LongInt;
LIS : elenco;
rimossi : Ansistring;
uscita : boolean;
Procedure ricercaUpper (var w:elenco; target:Longint); (*ritorna indice del valore maggiore/uguale a target oppure -1 se non esiste*)
var m,start,eend: Longint;
begin
start:=0; eend:=lung-1 ; m:=-1;
while start<=eend do
begin
m:=(start + eend) div 2;
if w[m]<target then start:=m+1
else if w[m]>=target then begin id:=m; eend:=m-1 end;
end;
if start=lung then id:=-1;
end;
begin
(*assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);*)
ReadLn(N);
rimossi:=''; lung:=N;
for i:=0 to N-1 do begin
Read(P[i]);
rimossi:=rimossi+IntTostr(P[i]);
end;
ReadLn();
i:=2; uscita:=false;
while uscita=false do
begin
i:=2; uscita:=true;
while i<lung do
begin
if (rimossi[i]<rimossi[i-1]) and (rimossi[i]<rimossi[i+1])
then
begin
delete(rimossi,i,1);
lung:=lung-1;
uscita:=false;
end;
i:=i+1;
end;
end;
for i:=1 to lung do P[i-1]:=StrToInt(rimossi[i]);
ANS := 0;
(*leftLIS[i] stores the length of longest increasing subsequence ending at index i*)
(*rightLIS[i] stores the length of longest decreasing subsequence starting at index i*)
len:=1; SetLength(LIS,len); LIS[0]:=P[0];
for i:=0 to lung-1 do begin leftLIS[i]:=1; rightLIS[i]:=1; end;
(*Calculate LIS from left to right for each position*)
for i :=0 to lung-1 do
begin
ricercaUpper(Lis, P[i]);
// if element is to be inserted in lis
writeln(i,' ',P[i],' ',id,' ');
if id <>-1 then
begin
LIS[id] := P[i];
leftLIS[i]:=id+1;
end
// if element in not present in lis insert at the end
else
begin
len:=len+1;
SetLength(LIS,len);
LIS[len-1] := P[i];
leftLIS[i]:=len;
end;
end;
(* Calculate LIS from right to left (decreasing subsequence) for each position*)
for i:=0 to len-1 do write(LIS[i],' '); writeln;
len:=1; SetLength(LIS,len); LIS[0]:=P[N-1];
for i :=lung-1 downto 0 do
begin
ricercaUpper(Lis, P[i]);
// if element is to be inserted in lis
if id <>-1 then
begin
LIS[id] := P[i];
leftLIS[i]:=id+1;
end
// if element in not present in lis insert at the end
else
begin
len:=len+1;
SetLength(LIS,len);
LIS[len] := P[i];
leftLIS[i]:=len;
end;
end;
for i:=0 to len-1 do write(LIS[i],' '); writeln;
maxMountainLength := 0;
(* Find the maximum length of mountain subsequence*)
// for every index check for longest mountain array,
for i := 1 to lung-1 do
begin
if (leftLIS[i] > 1) AND (rightLIS[i] > 1) then
begin
ans := leftLIS[i] + rightLIS[i] - 1;
maxMountainLength := max( maxMountainLength, ans);
end;
end;
// returning removals
ANS:= N - maxMountainLength;
WriteLn(ANS);
end.
cHJvZ3JhbSBtb3VudGFpbjsKVXNlcyBzeXN1dGlscywgTWF0aDsKCmNvbnN0CiAgICBNQVhOID0gMTAwMDA1OwpUeXBlIGVsZW5jbz0gQXJyYXkgb2YgTG9uZ0ludDsKdmFyCiAgICBBTlMsIE4sIGksIGosIGlkLCBtYXhNb3VudGFpbkxlbmd0aCwgbHVuZywgbGVuIDogTG9uZ0ludDsKICAgIFAsIGxlZnRMSVMsIHJpZ2h0TElTIDogQXJyYXlbMC4uTUFYTi0xXSBvZiBMb25nSW50OwogICAgTElTIDogZWxlbmNvOwogICAgcmltb3NzaSA6IEFuc2lzdHJpbmc7CiAgICB1c2NpdGEgOiBib29sZWFuOwogICAKClByb2NlZHVyZSByaWNlcmNhVXBwZXIgKHZhciB3OmVsZW5jbzsgdGFyZ2V0OkxvbmdpbnQpOyAoKnJpdG9ybmEgaW5kaWNlIGRlbCB2YWxvcmUgbWFnZ2lvcmUvdWd1YWxlIGEgdGFyZ2V0IG9wcHVyZSAtMSBzZSBub24gZXNpc3RlKikKICB2YXIgbSxzdGFydCxlZW5kOiBMb25naW50OwogICAgICAKIGJlZ2luICAKICAgc3RhcnQ6PTA7IGVlbmQ6PWx1bmctMSA7IG06PS0xOwogICB3aGlsZSBzdGFydDw9ZWVuZCBkbwogICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgIG06PShzdGFydCArIGVlbmQpIGRpdiAyOwogICAgICAgICAgICAgICAgICBpZiB3W21dPHRhcmdldCB0aGVuICBzdGFydDo9bSsxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgIGlmIHdbbV0+PXRhcmdldCB0aGVuICBiZWdpbiBpZDo9bTsgIGVlbmQ6PW0tMSBlbmQ7CiAgICAgICAgICAgZW5kOwogICBpZiBzdGFydD1sdW5nIHRoZW4gaWQ6PS0xOwogZW5kOwoKCgoKYmVnaW4KICAgICgqYXNzaWduKGlucHV0LCAgJ2lucHV0LnR4dCcpOyAgcmVzZXQoaW5wdXQpOwogICAgYXNzaWduKG91dHB1dCwgJ291dHB1dC50eHQnKTsgcmV3cml0ZShvdXRwdXQpOyopICAKCiAgICBSZWFkTG4oTik7CiAgICByaW1vc3NpOj0nJzsgbHVuZzo9TjsgCiAgICBmb3IgaTo9MCB0byBOLTEgZG8gYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgUmVhZChQW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmltb3NzaTo9cmltb3NzaStJbnRUb3N0cihQW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICBlbmQ7ICAKICAgIFJlYWRMbigpOwogICAgaTo9MjsgdXNjaXRhOj1mYWxzZTsKICAgIHdoaWxlIHVzY2l0YT1mYWxzZSBkbyAKICAgICAgIGJlZ2luCiAgICAgICAgaTo9MjsgdXNjaXRhOj10cnVlOwogICAgICAgIHdoaWxlIGk8bHVuZyBkbwogICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICBpZiAgKHJpbW9zc2lbaV08cmltb3NzaVtpLTFdKSBhbmQgKHJpbW9zc2lbaV08cmltb3NzaVtpKzFdKSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlKHJpbW9zc2ksaSwxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHVuZzo9bHVuZy0xOyAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzY2l0YTo9ZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOwogICAgICAgICAgICAgICAgaTo9aSsxOwogICAgICAgICAgICAgIGVuZDsgICAgICAgICAgICAgIAogICAgICAgZW5kOyAgICAgCiAgICBmb3IgaTo9MSB0byBsdW5nICBkbyBQW2ktMV06PVN0clRvSW50KHJpbW9zc2lbaV0pOyAKICAgCiAgICBBTlMgOj0gMDsgCgkoKmxlZnRMSVNbaV0gc3RvcmVzIHRoZSBsZW5ndGggb2YgbG9uZ2VzdCBpbmNyZWFzaW5nIHN1YnNlcXVlbmNlIGVuZGluZyBhdCBpbmRleCBpKikKCSgqcmlnaHRMSVNbaV0gc3RvcmVzIHRoZSBsZW5ndGggb2YgbG9uZ2VzdCBkZWNyZWFzaW5nIHN1YnNlcXVlbmNlIHN0YXJ0aW5nIGF0IGluZGV4IGkqKQogICAgbGVuOj0xOyBTZXRMZW5ndGgoTElTLGxlbik7IExJU1swXTo9UFswXTsKICAgIGZvciBpOj0wIHRvICBsdW5nLTEgZG8gYmVnaW4gbGVmdExJU1tpXTo9MTsgcmlnaHRMSVNbaV06PTE7IGVuZDsKICAgICgqQ2FsY3VsYXRlIExJUyBmcm9tIGxlZnQgdG8gcmlnaHQgZm9yIGVhY2ggcG9zaXRpb24qKQogICAgZm9yIGkgOj0wIHRvIGx1bmctMSBkbwogICAgICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgIHJpY2VyY2FVcHBlcihMaXMsIFBbaV0pOwogICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGVsZW1lbnQgaXMgdG8gYmUgaW5zZXJ0ZWQgaW4gbGlzCiAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVsbihpLCcgJyxQW2ldLCcgJyxpZCwnICcpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiBpZCA8Pi0xIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElTW2lkXSA6PSBQW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdExJU1tpXTo9aWQrMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgCiAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZWxlbWVudCBpbiBub3QgcHJlc2VudCBpbiBsaXMgaW5zZXJ0IGF0IHRoZSBlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjo9bGVuKzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldExlbmd0aChMSVMsbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElTW2xlbi0xXSA6PSBQW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0TElTW2ldOj1sZW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOyAKICAgICAgICAgICAgICAgICAgICBlbmQ7CiAgICAgICAoKiBDYWxjdWxhdGUgTElTIGZyb20gcmlnaHQgdG8gbGVmdCAoZGVjcmVhc2luZyBzdWJzZXF1ZW5jZSkgZm9yIGVhY2ggcG9zaXRpb24qKQogICBmb3IgaTo9MCB0byBsZW4tMSBkbyB3cml0ZShMSVNbaV0sJyAnKTsgd3JpdGVsbjsgCiAgIGxlbjo9MTsgU2V0TGVuZ3RoKExJUyxsZW4pOyBMSVNbMF06PVBbTi0xXTsKICAgZm9yIGkgOj1sdW5nLTEgIGRvd250byAwIGRvCiAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgcmljZXJjYVVwcGVyKExpcywgUFtpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZWxlbWVudCBpcyB0byBiZSBpbnNlcnRlZCBpbiBsaXMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgaWQgPD4tMSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJU1tpZF0gOj0gUFtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRMSVNbaV06PWlkKzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIAogICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGVsZW1lbnQgaW4gbm90IHByZXNlbnQgaW4gbGlzIGluc2VydCBhdCB0aGUgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW46PWxlbisxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRMZW5ndGgoTElTLGxlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJU1tsZW5dIDo9IFBbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRMSVNbaV06PWxlbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7IAogICAgICAgICAgICAgICAgICAgIGVuZDsKICAgICAgICAgICAgICAgICAgICBmb3IgaTo9MCB0byBsZW4tMSBkbyB3cml0ZShMSVNbaV0sJyAnKTsgd3JpdGVsbjsgCiAgICBtYXhNb3VudGFpbkxlbmd0aCA6PSAwOwogICAgKCogRmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgbW91bnRhaW4gc3Vic2VxdWVuY2UqKQogICAgLy8gZm9yIGV2ZXJ5IGluZGV4IGNoZWNrIGZvciBsb25nZXN0IG1vdW50YWluIGFycmF5LAogICAgZm9yIGkgOj0gMSB0byBsdW5nLTEgZG8KICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICBpZiAobGVmdExJU1tpXSA+IDEpIEFORCAocmlnaHRMSVNbaV0gPiAxKSB0aGVuIAogICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgYW5zIDo9IGxlZnRMSVNbaV0gKyByaWdodExJU1tpXSAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIG1heE1vdW50YWluTGVuZ3RoIDo9IG1heCggbWF4TW91bnRhaW5MZW5ndGgsIGFucyk7CiAgICAgICAgICAgICAgICAgICAgICBlbmQ7ICAKICAgICAgICAgICAgIGVuZDsKICAgIC8vIHJldHVybmluZyByZW1vdmFscwogICAKICAgQU5TOj0gTiAtIG1heE1vdW50YWluTGVuZ3RoOyAKICAgV3JpdGVMbihBTlMpOwplbmQu