• 常见错误总结


    这篇文章是必要的 至少我认为 可以提醒自己哪些是常见的坑点。

    1. 线段树合并常见错误点。

    合并之前 子树线段树是有效的 如果在merge处不新建节点那么 儿子线段树是无效的 这点一定要注意!因为这个时候儿子线段树可能已经被修改了。

    那么其实就有做法了在merge的时候新建节点不过这样空间消耗最坏是nlogn^2的接受不了的话那么就在递归和并的时候查询儿子操作 不要放在最后差 这点可以配套离线搞.先把要求的东西离线下来然后dfs线段树合并离线搞就很稳了。

    2.FFT错误点

    两个1e6的多项式相乘2e6但是数组要开到$2^{21}$=2097152这个大小才行也就是2100000。不然很容易RE。

    3.枚举子集错误点

    所谓二进制枚举子集 就是把一个二进制数的所有子集都给枚举出来 这点要注意而不只是只枚举了几个1的情况 这是我以前概念不清 至于两个for枚举二进制for枚举子集则是可以利用二项式定理证明。

    4.后缀数组

    把两个字符串接在一起时中间必须加入间隔符 防止第一个字符串用到第二个字符串的内容。重点哦。

    5.莫队的优化

    莫队有的时候是需要卡常的 有一个绝招是奇偶排序.

    原本是这样排的:

    int cmp(query a, query b) {
        return belong[a.l] == belong[b.l] ? a.r < b.r : belong[a.l] < belong[b.l];
    }
    

    现在这样排序:

    int cmp(query a, query b) {
        return (belong[a.l] ^ belong[b.l]) ? belong[a.l] < belong[b.l] : ((belong[a.l] & 1) ? a.r < b.r : a.r > b.r);
    }
    

    这样 就可以优化大部分的常数啦...实测挺快的其实..

    ST表LCA 注意数组不要开小这个东西是两倍 注意对于预处理的时候边界处理要正确 这个地方挂过很多次了。

  • 相关阅读:
    I/O多路复用技术
    网络编程的异常及处理
    LINUX的signal
    网络编程小知识
    一个位压缩技巧
    加密技术[翻译]
    暴雪的hash算法[翻译]
    喜欢就好
    【PYTHON】编码是个细致活
    【Python3】POP3协议收邮件
  • 原文地址:https://www.cnblogs.com/chdy/p/12131367.html
Copyright © 2020-2023  润新知