[数据结构]
左偏树
1.左偏树merge函数当左儿子的dis小于右儿子的dis时应该swap(lson[x] , rson[x]),写成swap(dis[lson[x]] , dis[rson[x]])。
set
1.set中的begin()和end()是不一样的,begin()有值而end()为空。
平衡树
1.splay的时候注意哨兵节点的存在,所以在进行区间操作是把哨兵节点的位置留出来
2.非旋转Treap中的split,return的pair并不是撕裂id的make_pair(id,id+1),而是make_pair(id,root)。
KD-Tree
1.KD-Tree中的查询近邻点对的时候query函数一定要写else,不然会T。是if(dl<dr){.......}else{.......},而不是if(dl<dr){.......}.........。
LCT
1.LCT中update中写成了while(!isroot(p)) update(f[p]),应该是if(!isroot(p)) update(f[p])。
并查集
1.并查集三目运算符应写成 fa[x]==x ? x : (fa[x]=find(fa[x])),写成了 fa[x]==x ? x : (fa[x] == find(fa[x]))。
线段树
1.在树剖序上建立线段树的时候,在退出时一定要记得:当前的l不一定是原来树上结点的点权下标。
主席树
1.主席树在区间查询的时候传的变量不仅仅是x-1,y,而且是root[x-1]和root[y]!
[树上问题]
杂
1.树的给father建边的方式,循环从1循环到n-1,加边应该是add(fa,i+1,value),写成add(fa,i,value)。
树的直径
1.在求树的直径的时候如果用的是维护一个点的最长链和次长链,那么不一定只在根节点更新答案,每一个点都会更新答案。
树链剖分
1.在树剖序上建立线段树的时候,在退出时一定要记得:当前的l不一定是原来树上结点的点权下标。
[图论]
Dijkstra
1.堆优化Dij中,如果采用懒删除的方法是不可以用vis记录的!
杂
1.单向边等价于双向边时虽然两条单向边的权值相等,但是开链式前向星val数组仍然要开成val[N<<1],而不是val[N]。
[数学]
概率期望
1.期望的平方不等于平方的期望...
博弈论
1.博弈论中,求mex的vis数组是不可以开全局变量的!!!
[动态规划]
斜率优化
1.斜率优化的时候注意在判断斜率的时候用交叉相乘的办法,尽量避免double的相除时间和精度问题。而且极其之慢,至少两倍卧槽啊... ...
状压dp
1.状压+记忆化暴搜时记得要考虑all状态的时候是否一定合法,如果不合法需要再暴搜退出的时候特判。
[网络流]
1.网络流的dinic模板中的mdl=dinic(to[i],min(val[i],tmp))中间的是tmp而不是fl。
[算法]
整体二分
1.往下递归的时候,操作数组并不是从1开始
[杂]
1.考试时define 了一个1000100 ,然后before数组开的是before[N/1000],导致实际上before开的是before[1000],使得before[1000]这个数没有定义,而且这个数组的用途数预处理阶乘,直接Gg
2.比如说题目中有2问,或者是输出多个数据的时候,记得注意输出数据之间的格式。应该是空格还是 还是tab,不然会PE啊。(模拟赛T2爆蛋)
3.将询问离线了、排序了之后记得按照询问的顺序排回来,不要按照离线后的顺序直接输出