错误集
数据结构
线段树
注意更新信息时,不要直接覆盖,可能覆盖掉更优的信息。[WC2010] 重建计划,CF1320C World of Darkraft: Battle for Azathoth(梅开二度)
正确:
if(l==r)
{
mx[cur]=max(mx[cur],v);
return;
}
错误:
if(l==r)
{
mx[cur]=v;
return;
}
LCT
维护子树信息时,修改点权不能只是 \(splay(x)\),要 \(makeroot(x)\)。共价大爷游长沙
点分治
注意分治对象。快递员
正确:
root=0,tot=siz[p],dfs_root(p,x),solve(root);
错误:
root=0,tot=siz[p],dfs_root(p,x),solve(p);
数学
多项式
\(NTT\) 时 \(lim\) 不够大,造成循环卷积。[2017 山东一轮集训 Day1] Sum
字符串
后缀自动机
节点数不超过 \(2n−1\),边数不超过 \(3n−4\),数组大小要开成两倍。CF1063F String Journey
其他
宏定义要注意括号的限制。[NOI2020] 美食家
正确:
#define id(a,b) (a+(b)*n)
错误:
#define id(a,b) (a+b*n)
取模要彻底,不要有漏的。[NOI Online #2 提高组] 游戏
二分的对象为给定元素的权值时,可以二分元素的排名来优化时间,但要注意权值相等的情况。CF603E Pastoral Oddities
正确:
for(int i=l;i<=mid;++i)
if(ed[i].v<e[L].v||(ed[i].v==e[L].v&&ed[i].id<e[L].id))
merge(ed[i].x,ed[i].y);
错误:
for(int i=l;i<=mid;++i)
if(ed[i].v<e[L].v)
merge(ed[i].x,ed[i].y);
\(pair\) 重载 \(<\) 后不能应用于 \(\max\) 和 \(\min\)。水の数列
bool operator < (const pair<int,int> &a,const pair<int,int> &b)
{
return a.first*a.second<b.first*b.second;
}
void work()
{
pair<int,int> a=make_pair(100,1),b=make_pair(20,20);
puts(max(a,b)==b?"1":"0");
}
会输出 \(0\)。
两个 \(10^{18}\) 的数相乘前要各自先取模。CF1261F Xor-Set