标记维护序列信息, A d d , M u l , S u m , A n s Add,Mul,Sum,Ans Add,Mul,Sum,Ans
H a s h Hash Hash表维护单点信息,注意转换:
a [ x ] = M u l ⋅ v a l + A d d a[x]=Mul\cdot val+Add a[x]=Mul⋅val+Add
∴ v a l = a [ x ] − A d d M u l \therefore val = \frac{a[x]-Add}{Mul} ∴val=Mula[x]−Add
逆元用线性递推求
每个操作复杂度 O ( 1 ) O(1) O(1),总复杂度 O ( q ⋅ t ) O(q\cdot t) O(q⋅t)
观察两个式子,可以写成: ( p + 1 ) ( q + 1 ) ≥ n + 1 (p+1)(q+1)\geq n+1 (p+1)(q+1)≥n+1
考虑两次贪心:
先求 q q q,考虑最大独立点集:
对于 p p p,记录 m i n _ d min\_d min_d表示每次开始操作时,图中最小的度数(注意到 m i n _ d = d [ q i ] min\_d=d[q_i] min_d=d[qi])。当 m i n _ d min\_d min_d取到最大值时,当前图中所有点都属于 p p p
简易证明:
( q + 1 ) ( p + 1 ) = ( q + 1 ) ( m a x _ d + 1 ) ≥ q ⋅ ( m a x _ d + 1 ) ≥ ∑ ( d [ q i ] + 1 ) = n (q+1)(p+1)=(q+1)(max\_d+1)\geq q\cdot(max\_d+1)\geq\sum(d[q_i]+1)=n (q+1)(p+1)=(q+1)(max_d+1)≥q⋅(max_d+1)≥∑(d[qi]+1)=n
∴ ( q + 1 ) ( p + 1 ) ≥ n \therefore (q+1)(p+1)\geq n ∴(q+1)(p+1)≥n
博弈论+计数 d p dp dp
博弈为阶梯博弈,结论:第奇数个空格的长度的异或和不为0,则必胜
容斥,总数-必败=必胜,必败即为异或和=0
相当于把 n − m n-m n−m个空格分到 m + 1 m+1 m+1个空段里( n n n个位置, m m m个金币, n − m n-m n−m个空格, m + 1 m+1 m+1个空段),其中第奇数个空段的异或和为 0 0 0
由于是异或,考虑一位一位地运算,设 f [ i ] [ j ] f[i][j] f[i][j]表示处理到了第 i i i位(二进制),还有 j j j个空格可以放
f [ i ] [ j ] = ∑ 2 ∣ k f [ i + 1 ] [ j − k ⋅ 2 i ] f[i][j]=\sum_{2|k} f[i+1][j-k\cdot2^i] f[i][j]=∑2∣kf[i+1][j−k⋅2i]
意义:只考虑第 i i i位,那么只要放偶数个 1 1 1,异或和都为 0 0 0
统计答案: a n s = ∑ f [ 0 ] [ i ] ⋅ P l a c e ( i , m + 2 2 ) ans=\sum f[0][i]\cdot Place(i,\frac{m+2}2) ans=∑f[0][i]⋅Place(i,2m+2)
其中 P l a c e ( i , m + 2 2 ) Place(i,\frac{m+2}2) Place(i,2m+2)表示把剩下的 i i i个空格随便丢到第偶数个格子( m + 2 2 \frac{m+2}2 2m+2个)里,可以使用隔板法 P l a c e ( n , m ) = C n + m − 1 n − 1 Place(n,m)=C^{n-1}_{n+m-1} Place(n,m)=Cn+m−1n−1