NKTREE - Cây nhị phân tìm kiếm

Tác giả: RR

Ngôn ngữ: Pascal

{$R-,Q-}
uses math;
const
  FINP='';
  FOUT='';
  MAXN=50001;
var
  nn,ln,a:array[1..MAXN] of longint;
  n:longint;
  check:boolean;
  f1,f2:text;
procedure openF; inline;
begin
  assign(f1,FINP); reset(f1);
  assign(f2,FOUT); rewrite(f2);
end;
procedure closeF; inline;
begin
  close(f1); close(f2);
end;
procedure inp; inline;
begin
  n:=0;
  while not seekeoln(f1) do
    begin
      n:=n+1;
      read(f1,a[n]);
    end;
end;
procedure solve; inline;
var
  i:longint;
begin
  ln[n]:=a[n];
  nn[n]:=a[n];
  for i:=n-1 downto 1 do
    begin
      nn[i]:=min(nn[i+1],a[i]);
      ln[i]:=max(ln[i+1],a[i]);
    end;
  check:=true;
  for i:=1 to n-1 do
    if (a[i]<a[i+1]) and (nn[i+1]<a[i]) then check:=false
    else if (a[i]>a[i+1]) and (ln[i+1]>a[i]) then check:=false;
end;
procedure ans; inline;
begin
  if check then writeln(f2,'YES')
  else writeln(f2,'NO');
end;
begin
  openF;
  inp;
  solve;
  ans;
  closeF;
end.

Download