最長(zhǎng)遞增子序列【LIS】

基準(zhǔn)時(shí)間限制:1 秒 空間限制:131072 KB 分值: 0難度:基礎(chǔ)題

給出長(zhǎng)度為N的數(shù)組,找出這個(gè)數(shù)組的最長(zhǎng)遞增子序列。(遞增子序列是指,子序列的元素是遞增的)

例如:5 1 6 8 2 4 5 10,最長(zhǎng)遞增子序列是1 2 4 5 10。

Input

第1行:1個(gè)數(shù)N,N為序列的長(zhǎng)度(2?<=?N?<=?50000)

第2?-?N?+?1行:每行1個(gè)數(shù),對(duì)應(yīng)序列的元素(-10^9?<=?S[i]?<=?10^9)

Output

輸出最長(zhǎng)遞增子序列的長(zhǎng)度。

Input示例

8

5

1

6

8

2

4

5

10

Output示例

5

問(wèn)題鏈接1134 最長(zhǎng)遞增子序列

問(wèn)題分析:典型的計(jì)算最長(zhǎng)遞增子序列的問(wèn)題。

程序說(shuō)明:如果采用時(shí)間復(fù)雜度為O(n*n)的程序,是會(huì)出現(xiàn)TLE的。需要使用時(shí)間復(fù)雜度為O(nlogn)的程序。


AC的C++程序如下:

[cpp]view plaincopy

#include?

usingnamespacestd;

constintN?=?50000;

intstack[N+1],?ps;

intmain()

{

intn,?val;

while(cin?>>?n)?{

ps?=?0;

for(inti=1;?i<=n;?i++)?{

cin?>>?val;

intleft=1,?right=ps,?mid;

while(left?<=?right)?{

mid?=?(left?+?right)?/?2;

if(val?>?stack[mid])

left?=?mid?+?1;

else

right?=?mid?-?1;

}

stack[left]?=?val;

ps?=?max(ps,?left);

}

cout?<<?ps?<<?endl;

}

return0;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 使用數(shù)組len來(lái)記錄前i個(gè)元素最長(zhǎng)子序列的長(zhǎng)度,因此len[i+1]=max{1,len[k]+1},arr[i+...
    fuel閱讀 226評(píng)論 0 1
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,921評(píng)論 0 33
  • 分治策略 本文包括分治的基本概念二分查找快速排序歸并排序找出偽幣棋盤(pán)覆蓋最大子數(shù)組 源碼鏈接:https://gi...
    廖少少閱讀 1,992評(píng)論 0 7
  • 自小就養(yǎng)成了一種追求近乎完美的習(xí)慣,不能說(shuō)這是個(gè)不好的習(xí)慣,但是有點(diǎn)對(duì)自己苛刻。人是一個(gè)主觀(guān)動(dòng)物,感性與理性并存,...
    地中海的傳說(shuō)閱讀 173評(píng)論 0 0
  • 雖然與你相戀的時(shí)間很晚,但卻可以陪你走很久。 我的愿望不多,只希望余生都能有你在我身邊。 親愛(ài)的,你是我最想留住的...
    愛(ài)麗絲兔閱讀 2,046評(píng)論 27 10

友情鏈接更多精彩內(nèi)容