如题,专门总结一下自己犯过的错误,引以为戒

1.偷懒使用#define int long long的时候,绝对要放在代码上方,绝对要放在读优上方!!!

 

2.在机房等地写代码时(特别是比赛时)要开代码警告

 

3.比赛时上交代码之前要再仔细检查文件流、子文件夹、以及有没有手贱打上什么奇奇怪怪的东西,代码修改了一定要保存,debug完后的代码一定要备份!!!(NOIP2018的惨痛教训)

 

4.数学题卡常的时候,不妨尝试把mod从longlong改成int(如果不wa的话)

 

5.用拓展欧拉定理的时候,必须在b>=mod时才$+\phi(mod)$,否则会错

 

6.一个字符串如果有循环节长度为x,则$hash(l+x,r)=hash(l,r-x)$

 

7.fhqtreap merge和split的时候,注意相对位置(比如在整个子树的第k+1大,分裂成前k大和剩余的数,在剩余的数里面再split一次是分裂成第一大和剩余的数!!!)

 

8.fhqtreap 按位置merge和split的时候,要注意相对位置(比如split(root,x,y,k)之后merge(root,x,y)而不能merge(root,y,x))

 

9.fhqtreap 在需要求max或者min的时候,一定要把root的val和mx/mn设成inf/-inf!!!

 

10.set&&multiset erase的时候删的是一个位置,不是一个数,删一个数时要先find一次判在不在,然后再删掉find那个迭代器!!

 

11.fhqtreap按权值分裂,split的时候是判当前节点权值如果大于v就分离左子树... 即if(v<=t[rt].v) r=rt, split(lc,l,lc,k),up(rt);