显然如果一个数后面有它的因数,那么它一定不可能是最大值。先从后往前枚举一遍把这些数去掉,再从前往后做一遍,每个数枚举它所有倍数统计即可。
因为每个数最多只会做一次,时间复杂度是 O ( T A i log A i ) O(TA_i\log A_i) O(TAilogAi) 。
代码
考虑每次遍历对于每一对 ( a , b ) (a,b) (a,b) 的影响:
( a , b ) → ( a x o r b , a ) → ( b , a x o r b ) → ( a , b ) (a,b)\rightarrow (a~xor~b, a)\rightarrow (b,a~xor~b)\rightarrow (a,b) (a,b)→(a xor b,a)→(b,a xor b)→(a,b)
所以判下总共会有几次完全遍历 0 0 0 到 n − 1 n-1 n−1,再把剩下的做一次就可以了。
要特判 i = n − i − 1 i = n-i-1 i=n−i−1 的情况。
时间复杂度 O ( T N ) O(TN) O(TN) 。
代码
对于 k ≥ 4 k\geq4 k≥4 的情况,如果某 2 2 2 组点间有偶数条边,那么显然可以将它们合并。如果所有组之间都是奇数条边,那么任意选出 4 4 4 组合并成 1 1 1 组,这一组的边数也是偶数。
因此 k ≤ 3 k\le 3 k≤3 。
当 m m m 为偶数时显然 k k k 即为 1 1 1 。
否则,若原图中有一个点度数为奇数,将它隔离后剩下的点的边数即为偶数,于是 k = 2 k=2 k=2 。
而若原图中所有点度数都为偶数,那么无论怎么隔离出一组点,其与剩下的点间的边数一定是偶数,所以不可能 2 2 2 组点内部的边数都为偶数。此时 k = 3 k=3 k=3 。
至于 k = 3 k=3 k=3 时求出一个合法的答案,只需要找出一条边 ( u , v ) (u,v) (u,v), u u u、 v v v、剩下的点各成一组即可。
代码
对于非叶子节点 u u u,它某个祖先 v v v 在 t 0 t_0 t0 时刻的操作对它在 t 1 t_1 t1产生影响的条件是 t 1 = t 0 + d u − d v t_1=t_0+d_u-d_v t1=t0+du−dv,即 t 1 − d u = t 0 − d v t_1-d_u=t_0-d_v t1−du=t0−dv 。
如果 u u u 是叶子节点,就变为 t 1 − d u ≥ t 0 − d v t_1-d_u\geq t_0-d_v t1−du≥t0−dv 。
那么离线之后遍历一遍树,记录下这些值就好了。
时间复杂度 O ( N + Q ) O(N+Q) O(N+Q) 。
代码
假设最终有 r r r 行被加了奇数次, c c c 列被加了奇数次,那么最终为奇数的格子数是 r ( m − c ) + c ( n − r ) r(m-c)+c(n-r) r(m−c)+c(n−r),因此可以算出有哪些 ( r , c ) (r,c) (r,c) 满足条件。
对于每对 ( r , c ) (r,c) (r,c),显然可以分开计算行和列的方案数,最后再乘起来。
以行为例,问题转化为用 1 − n 1-n 1−n 填 Q Q Q 个位置,使得恰好有 r r r 个数的出现次数为奇数。这个可以用生成函数做,答案即为
( x 1 ! + x 3 3 ! + x 5 5 ! + . . . ) r ( 1 + x 2 2 ! + x 4 4 ! + . . . ) n − r ( n r ) Q ! [ x Q ] ({x\over 1!}+{x^3\over 3!}+{x^5\over 5!}+...)^r(1+{x^2\over 2!}+{x^4\over 4!}+...)^{n-r}{n\choose r}Q!~[x^Q] (1!x+3!x3+5!x5+...)r(1+2!x2+4!x4+...)n−r(rn)Q! [xQ]
( e x − e − x 2 ) r ( e x + e − x 2 ) n − r ( n r ) Q ! [ x Q ] ({e^x-e^{-x}\over 2 })^r({e^x+e^{-x}\over 2 })^{n-r}{n\choose r}Q!~[x^Q] (2ex−e−x)r(2ex+e−x)n−r(rn)Q! [xQ]
( ∑ i = 0 r e ( 2 i − r ) x ( − 1 ) r − i ( r i ) ) ( ∑ j = 0 n − r e ( 2 j − n + r ) x ( n − r j ) ) 1 2 n ( n r ) Q ! [ x Q ] (\sum_{i=0}^re^{(2i-r)x}{(-1)^{r-i}}{r\choose i})(\sum_{j=0}^{n-r}e^{(2j-n+r)x}{n-r\choose j}){1\over {2^n}}{n\choose r}Q!~[x^Q] (i=0∑re(2i−r)x(−1)r−i(ir))(j=0∑n−re(2j−n+r)x(jn−r))2n1(rn)Q! [xQ]
先枚举 i + j i+j i+j :
( ∑ s = 0 n e ( 2 s − n ) x ∑ i = 0 s ( − 1 ) r − i ( r i ) ( n − r s − i ) ) 1 2 n ( n r ) Q ! [ x Q ] (\sum_{s=0}^ne^{(2s-n)x}\sum_{i=0}^s{(-1)^{r-i}}{r\choose i}{n-r\choose s-i}){1\over {2^n}}{n\choose r}Q!~[x^Q] (s=0∑ne(2s−n)xi=0∑s(−1)r−i(ir)(s−in−r))2n1(rn)Q! [xQ]
设 f ( n , r , s ) = ∑ i = 0 s ( − 1 ) r − i ( r i ) ( n − r s − i ) f(n,r,s)=\sum_{i=0}^s{(-1)^{r-i}}{r\choose i}{n-r\choose s-i} f(n,r,s)=∑i=0s(−1)r−i(ir)(s−in−r)
( ∑ s = 0 n e ( 2 s − n ) x f ( n , r , s ) ) 1 2 n ( n r ) Q ! [ x Q ] (\sum_{s=0}^ne^{(2s-n)x}f(n,r,s)){1\over {2^n}}{n\choose r}Q!~[x^Q] (s=0∑ne(2s−n)xf(n,r,s))2n1(rn)Q! [xQ]
( ∑ s = 0 n ∑ i = 0 ∞ ( 2 s − n ) i x i i ! f ( n , r , s ) ) 1 2 n ( n r ) Q ! [ x Q ] (\sum_{s=0}^n\sum_{i=0}^{\infin} {(2s-n)^ix^i\over i!}f(n,r,s)){1\over {2^n}}{n\choose r}Q!~[x^Q] (s=0∑ni=0∑∞i!(2s−n)ixif(n,r,s))2n1(rn)Q! [xQ]
( ∑ s = 0 n ( 2 s − n ) Q f ( n , r , s ) ) 1 2 n ( n r ) (\sum_{s=0}^n(2s-n)^Qf(n,r,s)){1\over {2^n}}{n\choose r} (s=0∑n(2s−n)Qf(n,r,s))2n1(rn)
现在的问题就是对每个 n , r n,r n,r,如何快速求出 f ( n , r , s ) f(n,r,s) f(n,r,s) 对 s = 0... n s=0...n s=0...n 的值。
因为
f ( n , r , s ) = ( x − 1 ) r ( x + 1 ) n − r [ x s ] f(n,r,s)=(x-1)^r(x+1)^{n-r}~[x^s] f(n,r,s)=(x−1)r(x+1)n−r [xs]
可以先预处理出 ( x − 1 ) k , ( x + 1 ) k ( k = 0... n ) (x-1)^k,(x+1)^k(k=0...n) (x−1)k,(x+1)k(k=0...n),然后对每个 ( n , r ) (n,r) (n,r) NTT 乘一遍得到 ( x − 1 ) r ( x + 1 ) n − r (x-1)^r(x+1)^{n-r} (x−1)r(x+1)n−r,于是就可以求出 f ( n , r , s ) f(n,r,s) f(n,r,s) 对 s = 0... n s=0...n s=0...n 的值。
然后发现还是 T 了…
那么不妨再进一步,预处理出 ( x − 1 ) k , ( x + 1 ) k ( k = 0.. n ) (x-1)^k,(x+1)^k(k=0..n) (x−1)k,(x+1)k(k=0..n) 对在做 NTT 时每个可能的 m = 2 i m=2^i m=2i 的 NTT 后的多项式,这样就可以在做每对 ( n , r ) (n,r) (n,r) 时少做 2 2 2 次 NTT 。
然后就卡过去了。
时间复杂度 O ( n 2 log 2 n + T n 2 log n ) O(n^2\log^2 n+Tn^2\log n) O(n2log2n+Tn2logn) 。
代码
挖坑