警钟长鸣
就是一些小技巧。也可以说是警钟。
sort函数排序不具有稳定性。- 不开
long long见祖宗。 - 特殊情况下,开了
#define int long long见祖宗。 memset见祖宗。- 大量输入建议使用快读。
- 线段树维护区间最小值区间覆盖
lazy的初始值要赋成INF。 - \(C_n^m\) 在满足 \(n\ \&\ m=m\) 的位运算关系时,值为奇数,否则为偶数。
- 一个代码中,有多个队列或者多个栈时,不要把他们搞混了。
vector就算不往里面存数也会占很多空间。- 用
long long做二进制时,要写成1ll << x。 - 当线段树同时维护区间加和区间乘时,下放标记时应先下放乘法标记再下放加法标记。
- 写 FHQ 时注意若该节点没有左右儿子,谨慎进行
pushdown和pushup。目的是不要给 0 节点加上奇奇怪怪的东西。 - 使用快读是应注意题目输入中是否存在负数。
- 写离散化的时候
lower_bound时记得使用unique后的序列长度。 multiset常数过大可尝试使用可删堆代替。#define慎用,(x)一定要带括号。比如#define S(x) (x * x)可能错误,应写为#define S(x) ((x) * (x))。- 把区间加离线下来做差分,这种情况记得开二倍空间。
- 据 UKE_Automation 获悉,一个排列,交换,这些关键词出现考虑逆序对。
- 莫队可以采用奇偶性优化:
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];
- 对于某些构造题(不限操作次数,如 CF2143E),可以以此为切入点:观察操作中不变的量。这一条来自这篇题解。
- 正数和负数之间判断奇偶性不能使用
%2而应使用&1。 - 我他妈再 all in 某个假做法我就是傻逼。
- 线段树
l,r传参可减小常数。 - 不要预设题目难度。不要一味追求正解。不要预设答题情况和答题策略。
- 维护中位数状物,可以考虑将大于中位数的赋为 \(+1\),小于的赋为 \(-1\),求和。
- dinic 建双向边,计算边数要乘 2。
- 求最值问题可考虑利用二分转化为可行性问题进性求解。
- 当且仅当所有元素只需要考虑与某个常量的大小关系时,考虑用 01 染色。
- 树上 dfs 时,不同层的 dfs 之间不要使用全局的栈/队列/数组,避免冲突。
- 分类讨论时,进一步分讨时不要落下大的条件。
- 一对多考虑能否转化为多对一。
- 正难则反。
- 最大贡献可以考虑用总贡献减去最小的非贡献(求小贡献同)。
- 网格图考虑黑白染色。

右图是丞相帅照。
写一些这个警钟是十分必要的。这个不仅是一些做题技巧,而且是一些一定不能再错的东西。细节性问题,一定要注意。
浙公网安备 33010602011771号