基础

  • 前置内容
    • 容斥原理
    • 全序

定理: 对于满足 全序 关系并且其中元素满足可加减性的序列 $\lbrace x_i \rbrace$,设其长度为 n,并设$S=\lbrace 1,2,3,\cdots,n \rbrace$,则有:

  • $\max_{i\in S}{x_i}=\sum_{T\subseteq S}{(-1)^{|T|-1}\min_{j\in T}{x_j}}$
  • $\min_{i\in S}{x_i}=\sum_{T\subseteq S}{(-1)^{|T|-1}\max_{j\in T}{x_j}}$

证明

  • 我们需要集合满足
    • 全序: 任意两个基础元素可比较大小
    • 需要零元素
    • 然后每个元素有逆元,这里(-1)乘法表示取逆元
    • 不需要可加,这里的加号只是把不同的连在一起
  • 例子 {🍟,🍔,🌭}
    • 全序 🍟 < 🍔 < 🌭
    • 零元 0+(🍟)=🍟
    • 逆元 (🍟)+(-🍟)=0

$🌭 =\max (\lbrace🍟,🍔,🌭 \rbrace)$

$= \sum_{T\subset S} (-1)^{|T|-1} \min(T)$

$= (-1)^{1-1}\min(\lbrace🍟 \rbrace)+(-1)^{1-1}\min(\lbrace 🍔 \rbrace)+(-1)^{1-1}\min(\lbrace 🌭 \rbrace) + (-1)^{2-1}\min(\lbrace 🍟,🍔 \rbrace)+(-1)^{2-1}\min(\lbrace 🍔, 🌭 \rbrace)+(-1)^{2-1}\min(\lbrace 🌭,🍟 \rbrace)+(-1)^{3-1}\min(\lbrace 🍟,🍔,🌭 \rbrace)$

$=🍟+🍔+🌭+(-🍟)+(-🍔)+(-🍟)+🍟$

$=🌭$


简单的逻辑证明,含有最大元和未含有最小元的产生1-1 对应的关系,其中(空集)和(只含有最大元)的1-1对应

  • 那么 这个1-1对应导致了一个他们的min相同,而(-1)幂次一个奇一个偶,所以都抵消了
  • 所以只剩下 只含有最大元的

用例

首先这个玩意很直接,几乎不会直接使用

然而 在概率论中计算期望会用到,

$E(\max_{i\in S}x_i)=\sum_{T\subset S}(-1)^{|T|-1} E(\min_{j\in T} x_j)$

$E(\min_{i\in S}x_i)=\sum_{T\subset S}(-1)^{|T|-1} E(\max_{j\in T} x_j)$

不同的是,这里$x_i$更多是其中一个自由变量,有时写作$X_i$

  • 证明: 其实一句话,E是 线性函数

进一步的 k-th min/max

$\text{k-th} \max_{i\in S} x_i =\sum_{T\subset S,|T|\ge k} (-1)^{|T|-k} \binom{|T|-1}{k-1}\min_{j\in T} x_j$

  • 证明: 其实类似的, 记结果为😺, 我们固定$\min$ 来看抵消
    • $\min =$😺 时,那么只能选最大k个, 那么就是$(-1)^{k-k}\binom{k-1}{k-1} 😺=😺$
    • $\min < 😺$ 时 希望证明 $\sum_{t=k}^{n+1} \binom{n}{t-1} (-1)^{t-k}\binom{t-1}{k-1} =0, n \ge t-1 \ge k-1 \ge 0$
      • n表示 比😺 大的个数
      • 在其中选了t-1个(加上😺就是t个)
      • 这种情况下的贡献 就是后一半
      • 为了简洁,用$t_{new}=t-1,k_{new}=k-1$替换
      • 希望证明 $\sum_{t=k}^n \binom{n}{t} (-1)^{t-k}\binom{t}{k} =0,n \ge t \ge k \ge 0, n > k$
      • $=\sum_t (-1)^{t-k}\frac{n!}{(t)!(n-t)!}\frac{(t)!}{(k)!(t-k)!}$
      • $=\sum_t (-1)^{t-k}\frac{n!}{(k)!(n-k)!}\frac{(n-k)!}{(n-t)!(t-k)!}$
      • $=\sum_t (-1)^{t-k} \binom{n}{k} \binom{n-k}{t-k}$
      • $=\binom{n}{k} \sum_t (-1)^{t-k} \binom{n-k}{t-k}$
      • $=\binom{n}{k} \sum_{s=t-k=0}^{n-k} (-1)^{s} \binom{n-k}{s}$
      • $=\binom{n}{k} (1-1)^{n-k}$
      • $=0$

类似的,根据E的线性的性质,有期望的形式

例题

2022-03 2835分 abc242H

  • 区间$[1,n]$,$n\le 400$
  • m个子区间$[l_i,r_i]$,$m \le 400$
  • 每次 1/m 概率选择一个区间 涂黑
  • 问全部区间都涂黑的 期望时间
  • $t_i=$第i个首次被涂黑的时间
  • $E(\min T)=$ 集合T中,任何一个首次被涂黑的时间
  • $E(\max T)=$ 集合T中,全部被涂黑的期望时间
  • 配合$dp[i][j]=$前i个,第i个被选中,j个覆盖了已选集合的 加权和 可做

2022-06 3500分 cf(1687/R796)E

2023-12 2668分 abc331G

  • 盒子里有 写着i的卡片有$C_i$张, $1\le i \le n \le 2e5$
  • 每次 抽出一张 记录数字, 放回盒子
  • 问 期望次数 1~n全至少出现一次
  • $t_i=$数字i首次抽到的时间
  • $E(\min T)=$ 集合T中,任何一个首次抽到
  • $E(\max T)=$ 集合T中,全部被抽过一次的期望时间
  • $\displaystyle \mathrm{ans}=\sum_{T\subset S} (-1)^{|T|+1} \frac{N}{\sum_{i\in T}C_i}$
    • 同样 分类讨论$\min$也就是右侧,然后去想办法算左侧-1幂次的加权和
    • 而左侧 把T展开,就是 生成函数系数
    • $\displaystyle -(1-x^{sz_1})(1-x^{sz_2})\cdots(1-x^{sz_m})$的系数,就是要求的内容, 一点poly技巧即可

ref

oiwiki 容斥原理 min_max

algo/反演 里面有提到 min_max 容斥

https://codeforces.com/contest/2077

D Maximum Polygon

评分3100

最大多边形

3s

256mb

给定一个长度为 $n$(2e5) 的数组 $a$,找出字典序最大的子序列(不要求连续)$s$,使得 $s$ 可以作为多边形的边长。

回忆一下,$s$ 可以作为多边形的边长当且仅当 $|s| \geq 3$ 且满足以下条件:

$2 \cdot \max(s_1, s_2, \ldots, s_{|s|}) < s_1 + s_2 + \ldots + s_{|s|}.$

如果不存在这样的子序列 $s$,输出 $-1$。

$s_i$ (1e9)

输出具体选的 值(不是下标)

閱讀全文 »

笛卡尔树

二叉树 搜索树性质+ 堆性质

在范围最值查询、范围top k查询(range top k queries)等问题上有广泛应用。它具有堆的有序性,中序遍历可以输出原数列。

上面是小根笛卡尔树

閱讀全文 »

https://codeforces.com/contest/2048

F. Kevin and Math Class

a[n]

b[n]

目标 让所有ai=1, 求最小操作次数

每次操作选择l,r

令 x=min(b[l..r])

a[l..r]/=x (向上取整)

范围

2s

1024mb

n 2e5

ai [1,1e18]

bi [1,1e18]

我的思路

如果向下取整很常见,会注意到 顺序可换 x/a/b=x/b/a

那么向上取整,x in (kab,(k+1)ab], 同样是顺序可换

想法1.

如果最小的b 对应的a不是1,那么需要一次全区间

这样一些操作后,可以把a按照1的存在切割成多个块。没想到然后怎么用

想法2.

另一个是b=2的话,那么至少存在一个方案,每次全部操作,是log级别,所以 最优次数智慧更少,也没想到怎么用

想法3.

预处理,如果 相邻的 i,j=i+1有 ai >= aj, bi <= bj, 那么i每次操作带上j, 这样只要ai=1了那么aj必定等于1, 这样可以得到 相邻的a,b大小关系是一致的,也没啥用

想法4.

想贪心,用操作后的最大值来表示,但很快找到反例

  • a=100 1 100
  • b=100 2 100

这样 操作一次后的局部最优是 50 1 50, 而这无法达到最终的最少次数,

閱讀全文 »

Dilworth 定理(偏序集分解定理)

关于偏序集的极大极小的定理,该定理断言:对于任意有限偏序集,其最大反链中元素的数目必等于最小链划分中链的数目。

偏序集能划分成的最少的全序集个数等于最大反链的元素个数。

对偶也是真: 任意有限偏序集,最长链元素的数目必等于最小反链划分中反链的数目


一些定义

原点集 = V

偏序( R 表示二元关系): 集合中一些元素可以比较大小

  • 自反: A R A
  • 反自反: A R B 且 B R A 则 A = B
  • 传递: A R B 且 B R C 则 A R C

全序: 集合中元素两两可以比较大小

链: V的子集, 是全序集

反链(antichain): V的子集,其任意元素之间都不可以比较大小

链覆盖: 若干个链的并 = V, 且任意两个链不包含重复点

反链覆盖: 若干个反链的并 = V, 且任意两个反链不包含重复点

最长链: 所有链中点个数最多的链

最长反链: 所有反链中点个数最多的链

偏序集高度 = 最长链的点的个数

偏序集宽度 = 最长反链的点的个数


定理: 最小(链的数量最少)链覆盖个数 = 最长反链点的个数 = 偏序集宽度

最小(反链的数量最少)反链覆盖 = 最长链的元素个数 = 偏序集的深度


证明:

归纳法

对于点集$V$, 最大反链集合$A$

$d = |A|$

显然$A$的最小链覆盖 $\ge d$, (因为A中每个点覆盖的链一定两两不同, 其实要证的是等号)

若任何$V$的真子集(归纳更小的点数而不是更小的d)都满足 其最大反链集合大小=最小链覆盖

如果V中两两不可比较, 则 d = |V|, 正确性显然


如果 存在$A \neq \max(V)$, $V$中的最大元素构成的集合, 同时$A \neq \min(V)$, $V$中最小元素构成的集合

拆分$V$为 $A$ 和$\ge A$的集合$V_1$,$A$和$\le A$的集合$V_2$, (这里注意到$A$是最大反链意味着$V$中所有元素至少可以和$A$中的其中一个元素比较大小,所以这里才能拆分)

显然$V_1,V_2$的元素个数都比V小

A依然是$V_1,V_2$ 的最大反链集合, 因为首先不可能超过$A$, 否则同样的方案可以用在$V$上, 因此$A$是一个可达的上界

那么有$V_1,V_2$ 都是最小d个链覆盖, 且每个$A$中的被一条链覆盖, 这样靠着把V1,V2的链通过A中的点一一对应拼接上, 则依然是d条链覆盖, 所以是存在=d的方案


如果$A = \max(V)$

  • 如果A中存在一个独立的不能和其它点比较的点$u$, 则$V - u$的最大反链 = $A - u$, 归纳得证
  • 否则$A$中 每个点都存在更小的点和它能比较的点, $u\in \max(V)$ 使得 $V - u$ 的最大反链集合的$A_0$
    • 如果存在$|A_0|$元素个数依然是$d$, 则这个方案 也可以用在$V$中, 满足$A_0 \neq \max(V)$
      • 如果$A_0 \neq \min(V)$, 则满足第一种情况可证
      • 如果$A_0 = \min(V)$, 则考虑$A_0$中取一个能和$u$比较的点$v$, (V\u)\v
        • 如果这个最大反链集合$A_1$ 如果$|A_1|=d$, 则$A_1 \neq \max(V)$, $A_1 \neq \min(V)$, 满足第一种情况,可证
        • 否则$|A_1| = d-1$, 这里说明(V\u\v + [u,v]) 左边可以d-1条链覆盖,右边可以1条链覆盖,$\le d$ 和最开始的$\ge d$得到只能是$d$
    • $|A_0| = d-1$时, A\u 是一个$A_0$的方案, 说明$d-1$链能覆盖 V\u, 多加一个u 能覆盖V,得证

证毕

综上,归纳法有 最大反链集合的个数 = 最小链覆盖条数

相关

abc237Ex

abc354G

https://oi-wiki.org/math/order-theory/#dilworth-%E5%AE%9A%E7%90%86%E4%B8%8E-mirsky-%E5%AE%9A%E7%90%86

https://baike.baidu.com/item/%E7%8B%84%E5%B0%94%E6%B2%83%E6%96%AF%E5%AE%9A%E7%90%86/18900593

https://blog.csdn.net/qq_43408238/article/details/104542949

0%