@ComeIntoPower 作死的我又来投稿了 23333
QWQ
块nm呢,div指令直接把余数都算出来了,你还乘了再减?要不是编译器救你,你怕是更慢
我哪知道lxl咋写的,反正他自称自己写了这个。就是普通的数组和函数外面套了一层struct
1.根据STL源码实现,pair也是普通的struct,所以两者速度应一样
2.其实更重要的问题是:你一直在抠没用的常数,这些东西多几句少几句指令没有用处,比如如下就是没用的常数:
(1)?:与if/else if,没有任何证据证明?:会比if/else if快
(2)switch根本不会做你想象中直接跳转的操作
(3)modadd,moddel还行,modmul是干嘛用的
(4)++x和x++根本不会有差别,O2下甚至连汇编指令都一样
牢记一句话,编译器比你聪明多了(推荐去https://gcc.godbolt.org/)
3.有用的常数:
(1)内存优化非常重要。有如下问题:使用内存连续,使用内存尽量小,申请和释放内存次数尽量少,想办法让CPU将你的东西搞到缓存里
(2)减少瓶颈操作次数,比如LCT/线段树的upd,pushdown是瓶颈,所以应该减少它们的次数。ZKW线段树正是因为减少了期望次数才变快了
(3)读入优化,这个就不用说。
(4)循环展开,刺激编译器给你并行操作。这个循环展开其实很有技巧,如果你直接展开有可能不会给你优化。
(5)dp的时候精确计算上界,减少状态数。在复杂度上除个常数是很有用的。有时候甚至可以直接降复杂度
如果你下次还只把我的话加上去,我就不予置评了