警钟长鸣

就是一些小技巧。也可以说是警钟。

  1. sort 函数排序不具有稳定性。
  2. 不开 long long 见祖宗。
  3. 特殊情况下,开了 #define int long long 见祖宗。
  4. memset 见祖宗。
  5. 大量输入建议使用快读。
  6. 线段树维护区间最小值区间覆盖 lazy 的初始值要赋成 INF
  7. \(C_n^m\) 在满足 \(n\ \&\ m=m\) 的位运算关系时,值为奇数,否则为偶数。
  8. 一个代码中,有多个队列或者多个栈时,不要把他们搞混了。
  9. vector 就算不往里面存数也会占很多空间。
  10. long long 做二进制时,要写成 1ll << x
  11. 当线段树同时维护区间加和区间乘时,下放标记时应先下放乘法标记再下放加法标记。
  12. 写 FHQ 时注意若该节点没有左右儿子,谨慎进行 pushdownpushup。目的是不要给 0 节点加上奇奇怪怪的东西。
  13. 使用快读是应注意题目输入中是否存在负数。
  14. 写离散化的时候 lower_bound 时记得使用 unique 后的序列长度。
  15. multiset 常数过大可尝试使用可删堆代替。
  16. #define 慎用,(x) 一定要带括号。比如 #define S(x) (x * x) 可能错误,应写为 #define S(x) ((x) * (x))
  17. 把区间加离线下来做差分,这种情况记得开二倍空间。
  18. 据 UKE_Automation 获悉,一个排列,交换,这些关键词出现考虑逆序对。
  19. 莫队可以采用奇偶性优化:
struct nodeq {
	int l, r, id;
	bool operator < (const nodeq & cmp) const {
		return bel[l] != bel[cmp.l] ? bel[l] < bel[cmp.l] : (bel[l] & 1 ? r < cmp.r : r > cmp.r);
	} 
} q[N];
  1. 对于某些构造题(不限操作次数,如 CF2143E),可以以此为切入点:观察操作中不变的量。这一条来自这篇题解
  2. 正数和负数之间判断奇偶性不能使用 %2 而应使用 &1
  3. 我他妈再 all in 某个假做法我就是傻逼。
  4. 线段树 lr 传参可减小常数。
  5. 不要预设题目难度。不要一味追求正解。不要预设答题情况和答题策略。
posted @ 2024-11-10 17:01  Zctf1088  阅读(68)  评论(0)    收藏  举报