「雅礼集训 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=a1∣a2∣a3∣...∣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,Ai⊆T2, T 2 ⊆ X T_2 \subseteq X T2⊆X
∴ ∀ i , A i ⊆ X \therefore \forall i, A_i \subseteq X ∴∀i,Ai⊆X
∴ ∀ 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>>(j−1)&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 t1∣x=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 t1∣x=t2∣x, 则区间内所有值变为一个数
2.时间复杂度
对区间的每次操作都会使区间内的数至少多一位相同(二进制下),不然就会某一位从全为 1 1 1 变为全为 0 0 0,所以每个区间至多操作 32 ∗ 2 32 * 2 32∗2 次
证明:(反证法
将 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
所以会有两种结果:
-
任意 a i a_i ai 拆分二进制的集合一定是 x x x 拆分二进制的子集,即结论 (1),所以这种情况就直接 r e t u r n return return 了。
-
使某一位的 1 1 1 全变为 0 0 0,下一次 t a ta ta 就会直接 r e t u r n return return 了