一些日常沙茶错误

  1. ST表的边界和查询的时候应该返回max(st[l][jg - 1], st[r - (1 << (jg - 1)) + 1][jg - 1]);(右边要+1避免遗漏)
  2. 关流同步 + cin.tie(NULL) 还是不如快读…而且关了流同步文件操作会GG, 尽量还是把C++当C用吧…
  3. 二分注意不要死循环 || 漏情况, 好像[l, r)是没有问题的?
  4. 高精度进位的条件是<=…高精去前导0的时候不要忘记只有一位数0的情况…
  5. tarjan 求强连通分量谁让你加双向边的…
  6. 想出完整的思路(包括实现)再去代码…改思路比改代码方便多了…
  7. 不要炸空间…算好空间比算好时间更加重要
  8. -O2 -Wshadow -Wunused -g -Wall -Wextra -Wl,--stack=67108864
  9. 防炸LL先除后乘, 防炸精度先乘后除
  10. 求最大的ans没有取max????
  11. 线段树没有push_down就递归了???(这两个都是特别困的时候犯的错误), 又犯了……………..
  12. 初始化数组的时候, 数组大小是MAXN, 结果初始化循环到了MAXN $\to RE$
  13. 想出思路一定要手玩样例! 而且要自己出样例卡!! 错误的思路对时间浪费更大!!!
  14. 如果这么写$\max$函数: #define max(a, b) ((a) > (b) ? (a) :(b)), 然后你又将函数的返回值当成变量放在了max()里, 而你的函数又恰好会对某些全局的值造成影响, 你就会发现你的值被改变了两次…$\to \mathrm {GG}(WA+TLE)$
  15. lazy标记看清楚: 覆盖是用=, 区间加是+=
  16. 分清楚节点的编号和其他的一些大小为n的数组内的数…
  17. 树链剖分while里比较的是if (ta[ta[x].top].deep < ta[ta[y].top].deep), 而不是if (ta[x].deep > ta[y].deep), (怎么感觉最近犯的错误越来越低级了…
  18. (b[dq].le + b[dq].ri) >> 1写成(le + ri) >> 1$\to \mathrm{GG}$(爆栈)
  19. priority_queue中的cmp如果是仿函数别忘了里面的大小比较是正好相反的…
  20. 反向边的编号计算应该是这样: #define bh(x, i) ((MAXN) * (i) + (x)), 而不是#define bh(x, i) ((MAXK) * (i) + (x)), 即注意每一次都是复制了一整张图…
  21. 谨慎用宏…改加的不该加的括号都想清楚了…能加就加上吧…反着你也背不过运算优先级…
  22. SA…居然能把last = i写成i = last…SA打的还是不是很熟…这两天再搞搞…
  23. SA把sa[tong[fir[i]]--] = i写成了sa[tong[fir[i]--]]…也许我应该在中括号之间加个空格啥的…fir数组你减个*啊…
  24. SPFA…inq[dq]忘了置成false…还有dq = q.front()后忘了q.pop()…我真是越来越傻逼了…
  25. $exgcd$ $ax + by = 1$最后$x$加上的是$b / \gcd$…不是$y / \gcd$…你求出的是$a, b$的$\gcd$…用$y$除是要闹哪样…果然我越来越傻逼了…
  26. $exgcd$ 最后是$y -= a / b * x$而不是什么奇奇怪怪的东西…过了这么长时间背的还是不熟啊…主要是不想做数论题
  27. 找负环的时候别忘了在dfs回溯的时候把当前节点的vis标记置为false, 防止横叉边被误判成负环
  28. 写错变量名…
  29. 数组把MAXN * 32写成MAXN << 32…而且编译完了测样例是WA而不是RE…
  30. 函数传参数的时候忘改成LL….
  31. 输出忘了%lld
  32. dinicbfs()忘记写dis[s] = 1
  33. INF赋小了…仔细算一下
  34. mn写反…或者没改完全…比如求平均数除错了…
  35. 树剖: x = ta[x].top
  36. codeblocks用中文工程名…还怀疑codeblocks不能调试…
  37. for (int i = g[dq]; ~i; i = b[i].next)没有memset(g, -1, sizeof(g));
  38. ST表: if (le + (t << 1) - 1 <= n) 以及 if (le + (1 << t) <= n)…直接给我$RE$成零分了…
  39. 进行一个类似fr[i] = fr[i - 1] + a[i] * i的预处理: (只把fr[]设为LL了)没有把a[]开成LL, 这样在预处理进行乘法的时候就已经炸了…
  40. 分块的时候最后一个右边界没有和$n$取$min$, 然后就凉了
  41. 进行会爆int的位运算, 写成了1 << i, 应该是1ll << i
  42. INF赋小了…要考虑所有可能的情况再赋INF或者干脆赋大点就好了
  43. 在有多种边的图中, 跑$kruskal$, 把一种边排了序, 结果加了另一种边…
  44. 数组不要开小, 尤其主席树…不要尝试算准空间…
  45. 排序时注意相等的情况应该让哪个排在前面
  46. 树状数组for(int i = x; i <= n; i += lowbit(i))注意判断是否传入的是$0$
  47. tarjan缩点的时候要判断两个点是否属于一个连通分量, 并不用并查集(????)
  48. tarjan缩点之后可能会出现重边, 注意对答案的影响
  49. 倍增求LCA的时候, 在两个点跳到一个深度的时候一定要记得看看这两个点是否已经相等了
  50. 网络流题目给的邻接矩阵, 建图的时候忘了加反向边
  51. 带取膜的前缀和, 忘了处理负数
  52. 忘记输出答案 以为$RE$了…
  53. int的范围大约是2e9…不要想当然的用int然后溢出