program mountain;
Uses sysutils, Math;
const
MAXN = 100005;
Type elenco= Array of LongInt;
var
ANS, N, i,h, id, x, maxMountainLength, lung, len, count : LongInt;
P, leftLIS, rightLIS, valli: 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:=len-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=len 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]);
valli[i]:=0;
end;
ReadLn();
uscita:=false; h:=0; count:=0;
i:=2; uscita:=true;
while i<lung do
begin
if (rimossi[i]<rimossi[i-1]) and (rimossi[i]<rimossi[i+1])
then
begin
valli[i+count-1]:=-1;
delete(rimossi,i,1);
lung:=lung-1; count:=count+1;
setLength(rimossi,lung);
end
else i:=i+1;
end;
for i:=0 to N-1 do write(valli[i],' '); writeln;
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 N-1 do begin leftLIS[i]:=1; rightLIS[i]:=1; end;
(*Calculate LIS from left to right for each position*)
for i :=1 to N-1 do
begin
ricercaUpper(Lis, P[i]);
// if element in not present in lis insert at the end
if id=-1 then
begin
len:=len+1;
SetLength(LIS,len);
LIS[len-1] := P[i];
leftLIS[i]:=len;
end
else
begin
// if element is to be inserted in lis
if (id<>0) and (valli[id]=-1) then
begin
LIS[id] := P[i];
leftLIS[i]:=id+1;
end
else leftLIS[i]:=0;
end;
end;
(* Calculate LIS from right to left (decreasing subsequence) for each position*)
len:=1; SetLength(LIS,len); LIS[0]:=P[N-1];
for i:=0 to N-1 do write(leftLIS[i],' '); writeln;
for i :=N-2 downto 0 do
begin
ricercaUpper(Lis, P[i]);
if id=-1 then
begin
len:=len+1;
SetLength(LIS,len);
LIS[len-1] := P[i];
rightLIS[i]:=len;
end
else
begin
// if element is to be inserted in lis
if (id<>0) and (valli[N-1-id]=-1) then
begin
LIS[id] := P[i];
rightLIS[i]:=id+1;
end
else rightLIS[i]:=0;
end;
end;
for i:=0 to N-1 do write(rightLIS[i],' '); writeln;
maxMountainLength := 0;
(* Find the maximum length of mountain subsequence*)
// for every index check for longest mountain array,
for i := 0 to N-1 do
begin
if (leftLIS[i] >=1) AND (rightLIS[i] >= 1) then
begin
x := leftLIS[i] + rightLIS[i] - 1;
maxMountainLength := max(maxMountainLength, x);
end;
end;
// returning removals
ANS:= N - maxMountainLength;
WriteLn(ANS);
end.
cHJvZ3JhbSBtb3VudGFpbjsKVXNlcyBzeXN1dGlscywgTWF0aDsKCmNvbnN0CiAgICBNQVhOID0gMTAwMDA1OwogICAgClR5cGUgZWxlbmNvPSBBcnJheSBvZiBMb25nSW50OwoKdmFyCiAgICBBTlMsIE4sIGksaCwgaWQsIHgsIG1heE1vdW50YWluTGVuZ3RoLCBsdW5nLCBsZW4sIGNvdW50IDogTG9uZ0ludDsKICAgIFAsIGxlZnRMSVMsIHJpZ2h0TElTLCB2YWxsaTogQXJyYXlbMC4uTUFYTi0xXSBvZiBMb25nSW50OwogICAgTElTIDogZWxlbmNvOwogICAgcmltb3NzaSA6IEFuc2lzdHJpbmc7CiAgICB1c2NpdGEgOiBib29sZWFuOwogICAKClByb2NlZHVyZSByaWNlcmNhVXBwZXIgKHZhciB3OmVsZW5jbzsgdGFyZ2V0OkxvbmdpbnQpOyAoKnJpdG9ybmEgaW5kaWNlIGRlbCB2YWxvcmUgbWFnZ2lvcmUvdWd1YWxlIGEgdGFyZ2V0IG9wcHVyZSAtMSBzZSBub24gZXNpc3RlKikKICB2YXIgbSxzdGFydCxlZW5kOiBMb25naW50OwogICAgICAKIGJlZ2luICAKICAgc3RhcnQ6PTA7IGVlbmQ6PWxlbi0xIDsgbTo9LTE7CiAgIHdoaWxlIHN0YXJ0PD1lZW5kIGRvCiAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgbTo9KHN0YXJ0ICsgZWVuZCkgZGl2IDI7CiAgICAgICAgICAgICAgICAgIGlmIHdbbV08dGFyZ2V0IHRoZW4gIHN0YXJ0Oj1tKzEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAgaWYgd1ttXT49dGFyZ2V0IHRoZW4gIGJlZ2luIGlkOj1tOyAgZWVuZDo9bS0xIGVuZDsKICAgICAgICAgICBlbmQ7CiAgIGlmIHN0YXJ0PWxlbiB0aGVuIGlkOj0tMTsKICAKIGVuZDsKCgoKCmJlZ2luCiAgICAoKmFzc2lnbihpbnB1dCwgICdpbnB1dC50eHQnKTsgIHJlc2V0KGlucHV0KTsKICAgIGFzc2lnbihvdXRwdXQsICdvdXRwdXQudHh0Jyk7IHJld3JpdGUob3V0cHV0KTsqKSAgCgogICAgUmVhZExuKE4pOwogICAgcmltb3NzaTo9Jyc7IGx1bmc6PU47ICAKICAgIGZvciBpOj0wIHRvIE4tMSBkbyBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICBSZWFkKFBbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICByaW1vc3NpOj1yaW1vc3NpK0ludFRvc3RyKFBbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICB2YWxsaVtpXTo9MDsgCiAgICAgICAgICAgICAgICAgICAgICAgZW5kOyAgCiAgICBSZWFkTG4oKTsKICAgIHVzY2l0YTo9ZmFsc2U7IGg6PTA7IGNvdW50Oj0wOwogICAKICAgICAgICBpOj0yOyB1c2NpdGE6PXRydWU7IAogICAgICAgIHdoaWxlIGk8bHVuZyBkbwogICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICBpZiAgKHJpbW9zc2lbaV08cmltb3NzaVtpLTFdKSBhbmQgKHJpbW9zc2lbaV08cmltb3NzaVtpKzFdKSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsbGlbaStjb3VudC0xXTo9LTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZShyaW1vc3NpLGksMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx1bmc6PWx1bmctMTsgIGNvdW50Oj1jb3VudCsxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TGVuZ3RoKHJpbW9zc2ksbHVuZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpOj1pKzE7ICAgICAgCiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgIGVuZDsgCiAgICAgICAgICAKICAgICAgICAgIAogICAgZm9yIGk6PTAgdG8gTi0xIGRvIHdyaXRlKHZhbGxpW2ldLCcgJyk7IHdyaXRlbG47CiAgICBBTlMgOj0gMDsgCgkoKmxlZnRMSVNbaV0gc3RvcmVzIHRoZSBsZW5ndGggb2YgbG9uZ2VzdCBpbmNyZWFzaW5nIHN1YnNlcXVlbmNlIGVuZGluZyBhdCBpbmRleCBpKikKCSgqcmlnaHRMSVNbaV0gc3RvcmVzIHRoZSBsZW5ndGggb2YgbG9uZ2VzdCBkZWNyZWFzaW5nIHN1YnNlcXVlbmNlIHN0YXJ0aW5nIGF0IGluZGV4IGkqKQogICAgbGVuOj0xOyBTZXRMZW5ndGgoTElTLGxlbik7IExJU1swXTo9UFswXTsKICAgIGZvciBpOj0wIHRvICBOLTEgZG8gYmVnaW4gbGVmdExJU1tpXTo9MTsgcmlnaHRMSVNbaV06PTE7IGVuZDsKICAgICgqQ2FsY3VsYXRlIExJUyBmcm9tIGxlZnQgdG8gcmlnaHQgZm9yIGVhY2ggcG9zaXRpb24qKQogICAgZm9yIGkgOj0xIHRvIE4tMSBkbwogICAgICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgIHJpY2VyY2FVcHBlcihMaXMsIFBbaV0pOwogICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGVsZW1lbnQgaW4gbm90IHByZXNlbnQgaW4gbGlzIGluc2VydCBhdCB0aGUgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiBpZD0tMSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjo9bGVuKzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRMZW5ndGgoTElTLGxlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSVNbbGVuLTFdIDo9IFBbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0TElTW2ldOj1sZW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBlbGVtZW50IGlzIHRvIGJlIGluc2VydGVkIGluIGxpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZDw+MCkgYW5kICh2YWxsaVtpZF09LTEpIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJU1tpZF0gOj0gUFtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0TElTW2ldOj1pZCsxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBsZWZ0TElTW2ldOj0wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgZW5kOyAKICAgCiAgICAgICAoKiBDYWxjdWxhdGUgTElTIGZyb20gcmlnaHQgdG8gbGVmdCAoZGVjcmVhc2luZyBzdWJzZXF1ZW5jZSkgZm9yIGVhY2ggcG9zaXRpb24qKQogICAgCiAgIGxlbjo9MTsgU2V0TGVuZ3RoKExJUyxsZW4pOyBMSVNbMF06PVBbTi0xXTsgCiAgIGZvciBpOj0wIHRvIE4tMSBkbyB3cml0ZShsZWZ0TElTW2ldLCcgJyk7IHdyaXRlbG47CiAgIGZvciBpIDo9Ti0yICBkb3dudG8gMCBkbwogICAgICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgIHJpY2VyY2FVcHBlcihMaXMsIFBbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiBpZD0tMSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjo9bGVuKzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRMZW5ndGgoTElTLGxlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSVNbbGVuLTFdIDo9IFBbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodExJU1tpXTo9bGVuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZWxlbWVudCBpcyB0byBiZSBpbnNlcnRlZCBpbiBsaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQ8PjApIGFuZCAodmFsbGlbTi0xLWlkXT0tMSkgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElTW2lkXSA6PSBQW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0TElTW2ldOj1pZCsxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJpZ2h0TElTW2ldOj0wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgZW5kOwogICAgICBmb3IgaTo9MCB0byBOLTEgZG8gd3JpdGUocmlnaHRMSVNbaV0sJyAnKTsgd3JpdGVsbjsgICAgICAgICAgICAgIAogICAgbWF4TW91bnRhaW5MZW5ndGggOj0gMDsKICAgICgqIEZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIG1vdW50YWluIHN1YnNlcXVlbmNlKikKICAgIC8vIGZvciBldmVyeSBpbmRleCBjaGVjayBmb3IgbG9uZ2VzdCBtb3VudGFpbiBhcnJheSwKICAgIGZvciBpIDo9IDAgdG8gTi0xIGRvCiAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgaWYgKGxlZnRMSVNbaV0gPj0xKSBBTkQgKHJpZ2h0TElTW2ldID49IDEpIHRoZW4gCiAgICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICB4IDo9IGxlZnRMSVNbaV0gKyByaWdodExJU1tpXSAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIG1heE1vdW50YWluTGVuZ3RoIDo9IG1heChtYXhNb3VudGFpbkxlbmd0aCwgeCk7CiAgICAgICAgICAgICAgICAgICAgICBlbmQ7ICAKICAgICAgICAgICAgIGVuZDsKICAgIC8vIHJldHVybmluZyByZW1vdmFscwogICAKICAgQU5TOj0gTiAtIG1heE1vdW50YWluTGVuZ3RoOyAKICAgV3JpdGVMbihBTlMpOwplbmQu