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.