Description
Solution
这是一道神仙题。
考虑对于某个固定的 A A A 判断其是否合法,并得到合法的充分必要条件。
首先, A A A 的极差不得超过 1 1 1。这是为什么呢?考虑 P P P 的某个最长上升子序列 { P p 1 , P p 2 , ⋯ , P p k } \{P_{p_1},P_{p_2},\cdots,P_{p_k}\} {Pp1,Pp2,⋯,Ppk}。对于每个位置 i i i,若 i ≠ P p 1 , i ≠ P p 2 , ⋯ , i ≠ P p k i \neq P_{p_1},i \neq P_{p_2},\cdots,i \neq P_{p_k} i=Pp1,i=Pp2,⋯,i=Ppk,则有 A i = k A_i= k Ai=k;否则,若 i = P p x ( 1 ≤ x ≤ k ) i=P_{p_x}(1 \le x \le k) i=Ppx(1≤x≤k),那么删去 i i i 后依然存在上升子序列 { P p 1 , P p 2 , ⋯ , P p x − 1 , P p x + 1 , ⋯ , P p k } \{P_{p_1},P_{p_2},\cdots,P_{p_{x-1}},P_{p_{x+1}},\cdots,P_{p_k}\} {Pp1,Pp2,⋯,Ppx−1,Ppx+1,⋯,Ppk},则有 A i ≥ k − 1 A_i \ge k-1 Ai≥k−1。因此极差必定不超过 1 1 1——换言之,序列由若干个 k k k 和 k − 1 k-1 k−1 构成。根据上述分析,不难更进一步得到结论——若 A i = k − 1 A_i=k-1 Ai=k−1,那么 i i i 是所有 LIS 的公共位置,若删去 i i i 则会对 LIS 的长度有影响;若 A i = k A_i=k Ai=k,那么 i i i 不属于至少一个 LIS,删去 i i i 不会对 LIS 的长度有影响。
但是, A A A 的极差不超过 1 1 1 显然不是充要条件,比如 { 4 , 3 , 3 , 4 , 3 } \{4,3,3,4,3\} {4,3,3,4,3} 就是个反例。
为进一步得到充要条件,我们以 A x = k A_x=k Ax=k 的众多 x x x 为分界点将序列划分为若干个连续区间 [ 1 , i 1 ) ( i 1 , i 2 ) ⋯ ( i x , n ] [1,i_1)(i_1,i_2)\cdots(i_x,n] [1,i1)(i1,i2)⋯(ix,n],这些区间之间两两独立。
考虑其中一个连续区间 [ L , R ] [L,R] [L,R] 对 LIS 会有怎样的贡献。思考两个最极端的情况—— [ L , R ] [L,R] [L,R] 对 LIS 产生了最小可能以及产生了最大可能的贡献。。
先思考前者。不难发现,无论 [ L , R ] [L,R] [L,R] 的位置如何,我们总可以让它对 LIS 的贡献为 0 0 0。例如, [ L , R ] [L,R] [L,R] 是划分出的最后一段区间,我们完全可以在 P P P 中倒序填入最小的几个数 R − L + 1 , R − L , ⋯ , 1 R-L+1,R-L,\cdots,1 R−L+1,R−L,⋯,1,没有任何贡献;再比如, [ L , R ] [L,R] [L,R] 是划分出的一段区间,我们完全可以在 P P P 中倒序填入最大的几个数 n , n − 1 , ⋯ , n − R + L n,n-1,\cdots,n-R+L n,n−1,⋯,n−R+L,没有任何贡献。
再思考后者。可以发现, [ L , R ] [L,R] [L,R] 的最大贡献为 ⌊ R − L + 1 2 ⌋ \lfloor \frac {R-L+1} {2} \rfloor ⌊2R−L+1⌋,这可以通过在 P P P 中依次填入两两配对的满足 x > y x>y x>y 的数对 ( x , y ) (x,y) (x,y) 得到。例如,在序列 { 1 , _ , _ , _ , _ , _ , _ , 8 } \{1,\_,\_,\_,\_,\_,\_,8\} {1,_,_,_,_,_,_,8} 中,我们可以填入 ( 3 , 2 ) ( 5 , 4 ) ( 7 , 6 ) (3,2)(5,4)(7,6) (3,2)(5,4)(7,6) 变成 { 1 , 3 , 2 , 5 , 4 , 7 , 6 , 8 } \{1,3,2,5,4,7,6,8\} {1,3,2,5,4,7,6,8}。不难发现, [ L , R ] [L,R] [L,R] 中没有 ⌈ \lceil ⌈ 所有 LIS 都必须要用 ⌋ \rfloor ⌋ 的位置,并且也使区间对 LIS 的贡献取到了最大值,岂不美哉?
通过上述两个思考,我们可以得到结论:
[
L
,
R
]
[L,R]
[L,R] 对 LIS 的贡献在
[
0
,
⌊
R
−
L
+
1
2
]
[0,\lfloor \frac {R-L+1} {2}]
[0,⌊2R−L+1] 中,且该值域区间中的所有值都能被取到。至于怎么证明,感性理解应该是再容易不过了;严谨证明的话本蒟蒻也不会,就抛一边了。
令 u u u 为满足 A i = k A_i=k Ai=k 的 u u u 的个数; v = ∑ ⌊ R − L + 1 2 ⌋ v=\sum \lfloor \frac {R-L+1} {2} \rfloor v=∑⌊2R−L+1⌋,即所有划分出的区间的最大可能贡献之和。综上所述,我们可以写出 A A A 合法的充分必要条件:
- k − min i = 1 n A i ≤ 1 k-\min_{i=1}^n A_i \le 1 k−mini=1nAi≤1(极差不超过 1 1 1 的数学表达式)
- u ≤ k ≤ u + v u \le k \le u+v u≤k≤u+v(最小可能的总贡献是 u + 0 u+0 u+0,最大可能的总贡献是 u + v u+v u+v,而 LIS 是 k k k,所以就有这个式子了)
该如何计算答案呢?考虑枚举 u , v u,v u,v,并累加 ( u , v ) (u,v) (u,v) 对答案的贡献。
∑ u = 1 m ∑ v = 0 n ( u + 1 n − u − 2 v ) ( u + v u ) max ( min ( u + v , m ) − max ( 3 , u ) + 1 , 0 ) \sum_{u=1}^m \sum_{v=0}^{n} {{u+1} \choose {n-u-2v}} {u+v \choose u} \max(\min(u+v,m)-\max(3,u)+1,0) u=1∑mv=0∑n(n−u−2vu+1)(uu+v)max(min(u+v,m)−max(3,u)+1,0)
其中, ( u + 1 n − v − 2 u ) {{u+1} \choose {n-v-2u}} (n−v−2uu+1) 表示,将 n − v − 2 u n-v-2u n−v−2u 个遗留下的位置插入到 u + 1 u+1 u+1 个划分出的区间中,注意到任意数模 2 2 2 都是 0 0 0 或 1 1 1,因此每段区间只能插入 0 0 0 或 1 1 1 个,于是就是一个组合数的形式;另一方面, ( u + v u ) {u+v \choose u} (uu+v) 表示,把 u u u 个 LIS 的必须点和 v v v 个数对穿插在一起的方案数。最后一部分就表示 [ max ( 3 , u ) , min ( u + v , m ) ] [\max(3,u),\min(u+v,m)] [max(3,u),min(u+v,m)] 中的整数的数量,其中 min ( u + v , m ) \min(u+v,m) min(u+v,m) 表示 k ≤ u + v , k ≤ m k \le u+v,k \le m k≤u+v,k≤m 的限制, max ( 3 , m ) \max(3,m) max(3,m) 表示 k ≥ 3 , k ≥ u k \ge 3,k \ge u k≥3,k≥u 的限制。
不过,在你开心地模拟完这个式子之后,你发现它过不了样例!!1
这是为什么呢?因为啊,我们完全没有考虑极差恰好为 0 0 0 的情况(也就是所有数都相等的情况),把这一类东西完全忽略了!于是,我们还需要在答案中加上这一部分。
那么,什么样的 k k k 可以使 A = { k , k , ⋯ , k } A=\{k,k,\cdots,k\} A={k,k,⋯,k} 合法呢?懒得分析了,直接打表,可以发现合法的 k k k 是 1 , 2 , 3 , ⋯ , ⌊ n 2 ⌋ 1,2,3,\cdots,\lfloor \frac n 2 \rfloor 1,2,3,⋯,⌊2n⌋ 和 n − 1 n-1 n−1。将答案加上这些数中不超过 k k k 且大于 1 1 1 的数的个数就行了。
综上所述,我们 O ( n 2 ) O(n^2) O(n2) 地解决了本题。