经验

线段树:

线段树(或者可并堆之类的数据结构)putdown,putup,或者直接计算ans时,一定要记得处理lazy!!!!!!

线段树的一些操作 注意你传进和传出函数的是什么东西 是 id[] rt[] in[] out[]还是啥 不然看都看不出来哪里错了

不要轻易尝试很骚的写法,比如putup或putdown取地址。如果非得这么写,一定要再三斟酌,有没有多取/漏取地址(是否真的修改了线段树,或是只修改了变量)。

合并ans,可以给ans设初值 再写个合并函数,或者直接分类讨论,怎么好写怎么来。

 

lct:

主要注意一下其splay与正常splay的区别

rotate ()中,原本是判断是否存在fa y ; 现在是判 is_root (y)

splay ()中,原本是判 y不为0 ; 现在是判 !is_root (y)

对于文艺平衡树,在rotate ()和solve ()里下放 ; 对于lct,变为在splay ()中一次性把x到根的路径上的lazy从上往下全putdown了。

access时,lazy^=1前要先splay!!!

 

所有数据结构,putup 前先 putdown!!!

 

DP:

对于概率DP,每一轮的状态(最小期望)等于min(不同的选法的贡献),每种选法贡献为之前的期望+本次操作的加权平均值(每一种选法转移的概率*此选法的贡献  之和)

             (概率)等于(不同的选法*转移成功的概率 之和)

换根DP,先跑dfs1处理一下需要的东西,比如size,deep

    ,再跑dfs2,一边跑一边处理本节点上面的子树的数据

对于优化3^n的状压,可以尝试每次更新一个二进制位

对于一些比较刁钻的 统计方案问题,考虑容斥,一般可以砍掉一层限制。比如:恰好等于 ---> 小于等于、双射关系 -->单射关系(nkoj8505)

 

lower_bound是>= upper_bound是>

 

写模板不要急,慢慢来,写错了难调到死!

写代码之前 先构思好

多测不清空,爆0两行泪

尤其是BSGS,网络流,点分治啥的

 

在main里调用函数时 注意调用顺序 比如注意先 init() dfs() 再做其他操作。而且注意 有时候写了初始化 一定要先在main里调用

 

 

 

网络流(尤其是费用流)一定要处理记住反向边,尤其是单路增广费用流,以及idx=1

网络流一般还可以用来处理一些带有反悔性质的题

 

遇到一些比较骚的计数题,比如要求恰好怎么,可能会容斥

stl 的 sort 的 cmp  不能他妈的取等,不然会发生一些特别傻逼的问题!!!!!!!!!!!

(最近为啥blog没人看QAQ)

 

2-sat 有点像平行世界的网络流

最重要的是一定要记得加双向边!a连向b,b_连向a_

 

FFT:

解决多项式,大数乘法问题。或者解决 Ci = ∑Aj * Bi-j 的计数问题(乘法原理)

算完答案记得除以limit,还要四舍五入!

最愚蠢的错误:写错(1<<m)和(m<<1),感谢我自己,调了1h终于找到了

多项式学习资料:牛顿迭代法在多项式运算的应用 | Miskcoo’s Space 讲得还不错

 

 

多项式求逆

n=m<<1

Gn*A=1 mod x^n

Gn-Gm=0 mod x^m

Gn*Gn-2*Gn*Gm+Gm2*Gm=0 mod x^n

Gn-2*Gm+A*Gm*Gm=0 mod x^n

Gn=(2-A*Gm)*Gm mod x^n

 

凸包 = 斜率的单调栈

 

posted @ 2023-05-10 21:00  zhuzc_114514  阅读(19)  评论(0)    收藏  举报
Title