有没有最长不上升序列nlogn 的算法(信息学)
答案:1 悬赏:80 手机版
解决时间 2021-04-25 02:37
- 提问者网友:最美的风景
- 2021-04-24 15:28
有没有最长不上升序列nlogn 的算法(信息学)
最佳答案
- 五星知识达人网友:神的生死簿
- 2021-04-24 16:08
有
用单调队列+二分。
用D[I] 记录 长度为I的序列的最小结尾值
易证知
D[I]为上升序列。
用二分查找找出当前A[I]的位置
并更新D[I]值
function min(x:longint):longint;
var s,w,mid:longint;
begin
s:=0;w:=l;
while s<w do
begin
mid:=(s+w) div 2;
if d[mid]<x then s:=mid+1 else w:=mid;
end;
exit(s);
end;
begin
readln(n,k);
for i:=1 to n do read(a[i]);
l:=0;d[0]:=-maxlongint;
for i:=1 to k do
begin
if a[i]>d[l] then
begin
inc(l);
d[l]:=a[i];
end
else
begin
t:=min(a[i]);
if a[i]<d[t] then d[t]:=a[i];
end;
end;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯