# 划分为增加的子序列

16

## 规格

• 每个阵列`B`形成`A`不相交（不一定是连续的）子序列的分区。在归纳法上，这意味着要么`B`是包含的单例数组，要么是的`A`第一个元素`B`是的子序列，`A`其余部分形成的分区，`A`并且删除了该子序列。
• `B`（不一定严格）增加每个数组。
• 中的数组数量`B`最少。

## 例

``````A    1 2 1 2 5 4 7 1
B[0]               1
B[1] 1 2       4 7
B[2]     1 2 5
``````

## 测试用例

``````[0] -> [[0]]
[3,5,8] -> [[3,5,8]]
[2,2,2,2] -> [[2,2,2,2]]
[1154,1012,976,845] -> [[845],[976],[1012],[1154]]
[6,32,1,2,34,8] -> [[1,2,8],[6,32,34]]
[1,12,1,12,1,13] -> [[1,1,1,13],[12,12]]
[6,4,6,13,18,0,3] -> [[0,3],[4,6,13,18],[6]]
[1,2,3,2,3,4,7,1] -> [[1,1],[2,2,3,4,7],[3]]
[0,9,2,7,4,5,6,3,8] -> [[0,2,3,8],[4,5,6],[7],[9]]
[7,1,17,15,17,2,15,1,6] -> [[1,1,6],[2,15],[7,15,17],[17]]
[4,12,2,10,15,2,2,19,16,12] -> [[2,2,2,12],[4,10,15,16],[12,19]]
[10,13,9,2,11,1,10,17,19,1] -> [[1,1],[2,10,17,19],[9,11],[10,13]]
[3,7,3,8,14,16,19,15,16,2] -> [[2],[3,3,8,14,15,16],[7,16,19]]
[15,5,13,13,15,9,4,2,2,17] -> [[2,2,17],[4],[5,9],[13,13,15],[15]]
``````

3

feersum

@feersum并不是故意的，很好。我已重写的条件`B`，希望现在可以更清楚了。
Zgarb 2015年

3

``````n#[]=[[n]]
n#(l:c)|[n]<=l=(n:l):c|1<2=l:n#c
foldr(#)[]
``````

1

# Pyth，20个字节

``````fTu&ahfSI+THGHGQm[)Q
``````

### 说明：

``````fTu&ahfSI+THGHGQm[)Q   implicit: Q = input list
m[)Q   create a list of empty lists and assign to G
u            Q       iterate over all numbers H in input:
f     G             filter for lists T in G, which satisfy:
+TH                 create a new list out of T and H
SI                    and check if it is sorted
h                    take the first such list T
a        H            and append H
&          G           logical and with G (so that u doesn't overwrite G)
fT                     remove all empty lists
``````

Zgarb 2015年

lirtosiast 2015年