NYOJ 214 單調遞增子串行 二

2022-03-06 04:14:28 字數 1544 閱讀 1617

時間限制:1000 ms  |  記憶體限制:65535 kb

難度:4

描述

給定一整型數列(0如:1 9 10 5 11 2 13的最長單調遞增子串行是1 9 10 11 13,長度為5。

輸入

有多組測試資料(<=7)

每組測試資料的第一行是乙個整數n表示序列中共有n個整數,隨後的下一行裡有n個整數,表示數列中的所有元素.每個整形數中間用空格間隔開(0

輸出

對於每組測試資料輸出整形數列的最長遞增子串行的長度,每個輸出佔一行。

樣例輸入

7

1 9 10 5 11 2 13

22 -1

樣例輸出

5

1解題:資料量大啊,o(n^2)方法不奏效啊!只有o(nlogn)演算法了

先附上tle**吧

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9

#define ll long long

10using

namespace

std;

11int d[100010],dp[100010

];12

intmain()

19 ans = 1;20

for(i = 2; i <= n; i++)

24if(dp[i] > ans) ans =dp[i];25}

26 printf("

%d\n

",ans);27}

28return0;

29 }

view code

好吧,上 ac **,o(nlogn)演算法,精妙之處在於折半查詢,速度很快的。噢最後那個top?top:1可以去掉的,秀逗了!損失4ms。

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9

#define ll long long

10using

namespace

std;

11int stk[100010

],top;

12void bsearch(int lt,int rt,int

val)

19 stk[lt] =val;20}

21int

main()

31 printf("

%d\n

",top?top:1

);32}33

return0;

34 }

view code

NYOJ 214 單調遞增子串行 二

先開設乙個陣列dp 然後從第乙個數開始列舉,和dp 陣列中的最後乙個元素end 進行比較,如果大於end 直接把這個數接到end 的後面,並且把end 更新為列舉的這個數。如果不大於edn 在dp 陣列中找到第乙個大於這個數的位子 k,並用這個數 替換掉dp k 例如 x 5,dp 則列舉過x 之後...

NYOJ 214 單調遞增子串行 二

單調遞增子串行 二 時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給定一整型數列 0如 1 9 10 5 11 2 13的最長單調遞增子串行是1 9 10 11 13,長度為5。輸入 有多組測試資料 7 每組測試資料的第一行是乙個整數n表示序列中共有n個整數,隨後的下一行裡...

nyoj 214 單調遞增子串行 二

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給定一整型數列 0 如 1 9 10 5 11 2 13的最長單調遞增子串行是1 9 10 11 13,長度為5。輸入 有多組測試資料 7 每組測試資料的第一行是乙個整數n表示序列中共有n個整數,隨後的下一行裡有n個整數,表示數...