题解:
注意到k<=20;记录20个数f1...f20表示从选1-20个数的乘积分别为多少,
那么是一个(…+x)(…+x)……(…+x)
拆括号,枚举含有j个x,那么就是xj∗f[i−j]∗Cjlen−i+j
那个组合数的含义?因为有j个x,这j个x所在括号另一项的可能性是什么呢?i-j个已经确定,还有len-i+j个未确定,要选出j个。
另外对于区间取反操作只要对为奇数的取反就可以了,另外要把lazy取反
合并两区间时f[k]=sigma(f[i]*f[k-i])就可以了
代码: