题意:就是求最长上升子序列.
分析:N^2DP会超时,用NlogN的算法.
code:
var a:array[0..40001] of longint;
datanum,d,n,i,p,top,num:longint;
procedure find(key,l,r:longint);
var mid:longint;
begin
if l=r then
begin p:=l; exit; end;
mid:=(l+r)>>1;
if a[mid]>key then find(key,l,mid)
else find(key,mid+1,r);
end;
begin
readln(datanum);
for d:=1 to datanum do
begin
fillchar(a,sizeof(a),0);
readln(n);
readln(num);
a[1]:=num;
top:=1;
for i:=2 to n do
begin
readln(num);
if num>a[top] then
begin inc(top); a[top]:=num; end
else
begin
find(num,1,top);
a[p]:=num;
end;
end;
writeln(top);
end;
end.
浙公网安备 33010602011771号