A A A
- 二分答案后用堆维护最小值即可, C o d e Code Code
B B B
- 考虑发现一些性质:
a:记将答案变小的操作为有效操作,则有效操作一定是用 k − 1 k-1 k−1 的代价将 k k k 个数归位
b:一次有效操作归位的数一定是一个环
c:若环上的点数为 k k k,则当且仅当环长为 2 k − 2 2k-2 2k−2 时这个环存在有效操作
proof:首先环长的下界是 2 k − 2 2k-2 2k−2,即考虑环上坐标最小的点,环的形态一定为从这个点开始向后跳然后总后面跳回来,同时一次交换操作会使环长 -2,故环长的上界是 2 k − 2 2k-2 2k−2
d:有效的环一定是坐标连续的一段
e:记 a i > i + 1 a_i>i+1 ai>i+1 的点为正大跨度点, a i < i − 1 a_i<i-1 ai<i−1 的为负大跨度点,则正大跨度点后一个点一定为负大跨度点,且交换二者会将原来的环划分成两个环
模拟即可,复杂度 O ( n ) O(n) O(n), C o d e Code Code
题解是考虑有效操作为值域和定义域的连续段且逆序对数为长度减 1,需要用数据结构求一下连续段
C C C
- 当 m + m ≤ n m+m\le n m+m≤n 时,初始点集合末点集一定在两个大小为 m m m 的子树中,方案数为拓扑序方案数
- 否则可以将点分为 3 类点,前
n
−
m
n-m
n−m 个点,
(
n
−
m
,
m
]
(n-m,m]
(n−m,m] 的点,以及
(
m
,
n
]
(m,n]
(m,n] 的点
其中 2 类点构成连通块,对这个连通块进行 d p dp dp,一个暴力的想法是对每个点钦定其为根进行 d p dp dp 最后容斥,发现可以考虑重心一定为 2 类点,所以对包涵重心的联通块进行 d p dp dp
我们记 f u , a , b f_{u,a,b} fu,a,b 表示 u u u 的子树有 a a a 个一类点 b b b 个三类点的方案数
对于一类点和三类点的转移,是子树的拓扑序方案数, O ( n 4 ) O(n^4) O(n4),用 d f s dfs dfs 序转移 O ( n 3 ) O(n^3) O(n3), C o d e Code Code