「雅礼集训 2018 Day7」A 证明

& = \And

^ = \oplus

∀ \forall = \forall

∴ \therefore = \therefore

1.结论

区间 [ 1 , n ] [1, n] [1,n] 的元素为 a 1 , a 2 , a 3 . . . a n a_1, a_2, a_3 ... a_n a1,a2,a3...an
t 1 = a 1 & a 2 & a 3 & . . . & a n t_1 = a_1 \And a_2 \And a_3 \And ... \And a_n t1=a1&a2&a3&...&an
t 2 = a 1 ∣ a 2 ∣ a 3 ∣ . . . ∣ a n t2 = a1 | a2 | a3 | ... | an t2=a1a2a3...an


(1) 结论1

t 2 & x = t 2 t2 \And x = t2 t2&x=t2,则 ∀ i , a i & x = a i \forall i, a_i \And x = a_i i,ai&x=ai

还是比较好证明。

t t t 二进制拆分后的各个值记作集合 T T T

∀ i , A i ⊆ T 2 \forall i, A_i \subseteq T_2 i,AiT2 T 2 ⊆ X T_2 \subseteq X T2X

∴ ∀ i , A i ⊆ X \therefore \forall i, A_i \subseteq X i,AiX

∴ ∀ i , a i & x = a i \therefore \forall i, a_i \And x = a_i i,ai&x=ai


(2) 结论2

t 2 & x = t 1 & x t2 \And x = t1 \And x t2&x=t1&x, 则区间内所有值变为一个数 ( T J TJ TJ 的结论太大了

引理 1 1 1

t 2 & x = t 1 & x t2 \And x= t1 \And x t2&x=t1&x 说明对于 ∀ j ∈ [ 1 , n ] , x > > ( j − 1 ) & 1 = 1 \forall j \in [1, n], x >> (j - 1) \And 1 = 1 j[1,n],x>>(j1)&1=1 ,所有 a j a_j aj 的第 i i i 位要么都为 0 0 0, 要么都为 1 1 1

引理 1 1 1 证明: (反证法

t t t 二进制拆分后的第 i i i 位的值记作 T T T

A j = 1 , A k = 0 A_j = 1, A_k = 0 Aj=1,Ak=0, 则 T 2 = 1 , T 1 = 0 T_2 = 1, T_1 = 0 T2=1,T1=0

T 1 & X = 0 , T 2 & X = 1 T_1 \And X = 0, T_2 \And X = 1 T1&X=0,T2&X=1,两者不相等,矛盾

证明:

X = 0 X = 0 X=0

A i & X = 0 A_i \And X = 0 Ai&X=0,第 i i i 位相同。

X = 1 X = 1 X=1

∵ ∀ i , j \because \forall i,j i,j A i = A j A_i = A_j Ai=Aj

A i = 1 A_i = 1 Ai=1, 则 ∀ A i & X = 1 \forall A_i \And X = 1 Ai&X=1

A i = 0 A_i = 0 Ai=0, 则 ∀ A i & X = 0 \forall A_i \And X = 0 Ai&X=0

∴ ∀ i , j \therefore \forall i,j i,j A i & X = A j & X A_i \And X = A_j \And X Ai&X=Aj&X

则第 i i i 位相同

综上:得证。


同理

t 1 ∣ x = t 1 t1 | x = t1 t1x=t1, 则 ∀ i , a i & x = a i \forall i, a_i \And x = a_i i,ai&x=ai

t 1 ∣ x = t 2 ∣ x t1|x=t2|x t1x=t2x, 则区间内所有值变为一个数


2.时间复杂度

对区间的每次操作都会使区间内的数至少多一位相同(二进制下),不然就会某一位从全为 1 1 1 变为全为 0 0 0,所以每个区间至多操作 32 ∗ 2 32 * 2 322

证明:(反证法

t t t 二进制拆分后的第 i i i 位的值记作 T T T

不妨讨论是与运算

假设没有多一位相同

x x x 的第 i i i 位如果为 0 0 0, 则 ∀ i , j \forall i, j i,j A i = A j A_i = A_j Ai=Aj,则下一次 t a ta ta 会变为 0 0 0

x x x 的第 i i i 位如果为 1 1 1, 则 ∀ A i < = X \forall A_i <= X Ai<=X

所以会有两种结果:

  1. 任意 a i a_i ai 拆分二进制的集合一定是 x x x 拆分二进制的子集,即结论 (1),所以这种情况就直接 r e t u r n return return 了。

  2. 使某一位的 1 1 1 全变为 0 0 0,下一次 t a ta ta 就会直接 r e t u r n return return

posted @ 2021-06-19 08:07  C2022lihan  阅读(71)  评论(0编辑  收藏  举报