Daniel_yuan 笨死了!!!
不管是左移还是右移,移动的位数超过位长是 UB,主流编译器会把移动的位数对位长取模。所以 1ull >> 64
得到的是 1
不是 0
。
生成函数的前缀和是乘上 \(1+x+x^2+...\),普通函数的离散前缀和是离散积分,两者完全不同。
长度为 \(K\) 的常系数齐次线性递推,矩阵快速幂的求转移矩阵的 \(n-K\) 次方,而多项式做法是求 \(x^n\) 对特征多项式取模的结果。
写 SAM 的时候复制节点记得要把大多数维护的信息都传过去。
线段树合并优化 DP 注意左右孩子合并顺序。
vector
内部元素内存确实是动态开的,但是它有一个指针的静态内存。(不要傻到 vector
静态内存爆炸)
扫描线维护矩形面积并的线段树,有句话可能是这样的 sum[x] = (tag[x] > 0 ? val[x] : sum[lc] + sum[rc]);
,这句话可能会对叶子实现,如果不特判的话,数组要开 8 倍。