program mountain;
Uses sysutils, Math;
const
MAXN = 100005;
Type elenco= Array of LongInt;
var
ANS, N, i, id,x, maxMountainLength, lung, len, ricordaANS : 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:=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]);
end;
ReadLn();
i:=2; uscita:=false; ricordaANS:=100004; ANS := 0;
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;
for i:=1 to lung do P[i-1]:=StrToInt(rimossi[i]);
if uscita=true then continue
else
begin
(*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 :=1 to lung-1 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 -1] := P[i];
leftLIS[i]:=len;
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 :=lung-2 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];
rightLIS[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];
rightLIS[i]:=len;
end;
end;
maxMountainLength := 0;
(* Find the maximum length of mountain subsequence*)
// for every index check for longest mountain array,
for i := 0 to lung-1 do
begin
if (leftLIS[i] >=1) AND (rightLIS[i] >= 1) then
begin
x := leftLIS[i] + rightLIS[i] - 1;
maxMountainLength := max(maxMountainLength, x);
writeln (maxMountainLength, ' ciao ');
end;
end;
// returning removals
ANS:= N - maxMountainLength;
if ANS<ricordaANS then ricordaANS:=ANS;
end;
WriteLn(ricordaANS); end;
end.
cHJvZ3JhbSBtb3VudGFpbjsKVXNlcyBzeXN1dGlscywgTWF0aDsKCmNvbnN0CiAgICBNQVhOID0gMTAwMDA1OwpUeXBlIGVsZW5jbz0gQXJyYXkgb2YgTG9uZ0ludDsKdmFyCiAgICBBTlMsIE4sIGksIGlkLHgsIG1heE1vdW50YWluTGVuZ3RoLCBsdW5nLCBsZW4sIHJpY29yZGFBTlMgOiBMb25nSW50OwogICAgUCwgbGVmdExJUywgcmlnaHRMSVMgOiBBcnJheVswLi5NQVhOLTFdIG9mIExvbmdJbnQ7CiAgICBMSVMgOiBlbGVuY287CiAgICByaW1vc3NpIDogQW5zaXN0cmluZzsKICAgIHVzY2l0YSA6IGJvb2xlYW47CiAgIAoKUHJvY2VkdXJlIHJpY2VyY2FVcHBlciAodmFyIHc6ZWxlbmNvOyB0YXJnZXQ6TG9uZ2ludCk7ICgqcml0b3JuYSBpbmRpY2UgZGVsIHZhbG9yZSBtYWdnaW9yZS91Z3VhbGUgYSB0YXJnZXQgb3BwdXJlIC0xIHNlIG5vbiBlc2lzdGUqKQogIHZhciBtLHN0YXJ0LGVlbmQ6IExvbmdpbnQ7CiAgICAgIAogYmVnaW4gIAogICBzdGFydDo9MDsgZWVuZDo9bGVuLTEgOyBtOj0tMTsKICAgd2hpbGUgc3RhcnQ8PWVlbmQgZG8KICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICBtOj0oc3RhcnQgKyBlZW5kKSBkaXYgMjsKICAgICAgICAgICAgICAgICAgaWYgd1ttXTx0YXJnZXQgdGhlbiAgc3RhcnQ6PW0rMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICBpZiB3W21dPj10YXJnZXQgdGhlbiAgYmVnaW4gaWQ6PW07ICBlZW5kOj1tLTEgZW5kOwogICAgICAgICAgIGVuZDsKICAgaWYgc3RhcnQ9bGVuIHRoZW4gaWQ6PS0xOwogIAogZW5kOwoKCgoKYmVnaW4KICAgICgqYXNzaWduKGlucHV0LCAgJ2lucHV0LnR4dCcpOyAgcmVzZXQoaW5wdXQpOwogICAgYXNzaWduKG91dHB1dCwgJ291dHB1dC50eHQnKTsgcmV3cml0ZShvdXRwdXQpOyopICAKCiAgICBSZWFkTG4oTik7CiAgICByaW1vc3NpOj0nJzsgbHVuZzo9TjsgCiAgICBmb3IgaTo9MCB0byBOLTEgZG8gYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgUmVhZChQW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmltb3NzaTo9cmltb3NzaStJbnRUb3N0cihQW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICBlbmQ7ICAKICAgIFJlYWRMbigpOwogICAgaTo9MjsgdXNjaXRhOj1mYWxzZTsgcmljb3JkYUFOUzo9MTAwMDA0OyBBTlMgOj0gMDsgCiAgICB3aGlsZSB1c2NpdGE9ZmFsc2UgZG8gCiAgICAgICBiZWdpbgogICAgICAgIGk6PTI7IHVzY2l0YTo9dHJ1ZTsKICAgICAgICB3aGlsZSBpPGx1bmcgZG8KICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgaWYgIChyaW1vc3NpW2ldPHJpbW9zc2lbaS0xXSkgYW5kIChyaW1vc3NpW2ldPHJpbW9zc2lbaSsxXSkgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZShyaW1vc3NpLGksMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx1bmc6PWx1bmctMTsgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2NpdGE6PWZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDsKICAgICAgICAgICAgICAgIGk6PWkrMTsKICAgICAgICAgICAgICBlbmQ7ICAgICAgICAgICAgCiAgICAgICBmb3IgaTo9MSB0byBsdW5nICBkbyBQW2ktMV06PVN0clRvSW50KHJpbW9zc2lbaV0pOyAKICAgICAgIGlmIHVzY2l0YT10cnVlIHRoZW4gY29udGludWUKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgYmVnaW4KICAgICAgIAoJKCpsZWZ0TElTW2ldIHN0b3JlcyB0aGUgbGVuZ3RoIG9mIGxvbmdlc3QgaW5jcmVhc2luZyBzdWJzZXF1ZW5jZSBlbmRpbmcgYXQgaW5kZXggaSopCgkoKnJpZ2h0TElTW2ldIHN0b3JlcyB0aGUgbGVuZ3RoIG9mIGxvbmdlc3QgZGVjcmVhc2luZyBzdWJzZXF1ZW5jZSBzdGFydGluZyBhdCBpbmRleCBpKikKICAgIGxlbjo9MTsgU2V0TGVuZ3RoKExJUyxsZW4pOyBMSVNbMF06PVBbMF07CiAgICBmb3IgaTo9MCB0byAgbHVuZy0xIGRvIGJlZ2luIGxlZnRMSVNbaV06PTE7IHJpZ2h0TElTW2ldOj0xOyBlbmQ7CiAgICAoKkNhbGN1bGF0ZSBMSVMgZnJvbSBsZWZ0IHRvIHJpZ2h0IGZvciBlYWNoIHBvc2l0aW9uKikKICAgIGZvciBpIDo9MSB0byBsdW5nLTEgZG8KICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICByaWNlcmNhVXBwZXIoTGlzLCBQW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBlbGVtZW50IGlzIHRvIGJlIGluc2VydGVkIGluIGxpcwogICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlkIDw+LTEgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSVNbaWRdIDo9IFBbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0TElTW2ldOj1pZCsxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAKICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBlbGVtZW50IGluIG5vdCBwcmVzZW50IGluIGxpcyBpbnNlcnQgYXQgdGhlIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuOj1sZW4rMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0TGVuZ3RoKExJUyxsZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSVNbbGVuIC0xXSA6PSBQW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0TElTW2ldOj1sZW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOyAKICAgICAgICAgICAgICAgICAgICBlbmQ7IAogICAgICAgICAgICAgICAgICAgIAogICAgICAgKCogQ2FsY3VsYXRlIExJUyBmcm9tIHJpZ2h0IHRvIGxlZnQgKGRlY3JlYXNpbmcgc3Vic2VxdWVuY2UpIGZvciBlYWNoIHBvc2l0aW9uKikKICAgIAogICBsZW46PTE7IFNldExlbmd0aChMSVMsbGVuKTsgTElTWzBdOj1QW04tMV07IAogICBmb3IgaSA6PWx1bmctMiAgZG93bnRvIDAgZG8KICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICByaWNlcmNhVXBwZXIoTGlzLCBQW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZWxlbWVudCBpcyB0byBiZSBpbnNlcnRlZCBpbiBsaXMKICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiBpZCA8Pi0xIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElTW2lkXSA6PSBQW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRMSVNbaV06PWlkKzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIAogICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGVsZW1lbnQgaW4gbm90IHByZXNlbnQgaW4gbGlzIGluc2VydCBhdCB0aGUgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW46PWxlbisxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRMZW5ndGgoTElTLGxlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJU1tsZW4gLTFdIDo9IFBbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0TElTW2ldOj1sZW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOyAKICAgICAgICAgICAgICAgICAgICBlbmQ7CiAgICAgICAgICAgICAgICAgIAogICAgbWF4TW91bnRhaW5MZW5ndGggOj0gMDsKICAgICgqIEZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIG1vdW50YWluIHN1YnNlcXVlbmNlKikKICAgIC8vIGZvciBldmVyeSBpbmRleCBjaGVjayBmb3IgbG9uZ2VzdCBtb3VudGFpbiBhcnJheSwKICAgIGZvciBpIDo9IDAgdG8gbHVuZy0xIGRvCiAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgaWYgKGxlZnRMSVNbaV0gPj0xKSBBTkQgKHJpZ2h0TElTW2ldID49IDEpIHRoZW4gCiAgICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICB4IDo9IGxlZnRMSVNbaV0gKyByaWdodExJU1tpXSAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIG1heE1vdW50YWluTGVuZ3RoIDo9IG1heChtYXhNb3VudGFpbkxlbmd0aCwgeCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlbG4gKG1heE1vdW50YWluTGVuZ3RoLCAnIGNpYW8gJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgZW5kOyAgCiAgICAgICAgICAgICBlbmQ7ICAKICAgIC8vIHJldHVybmluZyByZW1vdmFscwogICAKICAgQU5TOj0gTiAtIG1heE1vdW50YWluTGVuZ3RoOyAgCiAgIGlmIEFOUzxyaWNvcmRhQU5TIHRoZW4gcmljb3JkYUFOUzo9QU5TOyAKICAgZW5kOyAKICAgV3JpdGVMbihyaWNvcmRhQU5TKTsgZW5kOwplbmQu