Tricks

· · 个人记录

转化为做差分

2463 [SDOI2008]Sandy的卡片

考虑有没有什么方法去掉包含关系。

看这里

看这里

看这里

还是看这里

2020SDSC Day2T2

套路!

树上联通块数=点数-边数

仙人掌上联通块数=点数-边数+环数

算所有区间的某个值的和,考虑枚举右端点,数据结构维护所有左端点的答案(的和)

线段树维护平方的和

可以考虑一个一个条件加入,也可以考虑二分。

而二分的好处之一是——可以离线了。

使用字符串Hash,O(n)求最长回文串?

就要求最大值,我们就枚举的过程中让它尽量变大。复杂度就O(n)啦

2021.3.3update:又见到了一个例子:区间众数的一个做法。

这里

从大到小考虑元素B,对于和它对应的所有A的答案打上一个覆盖标记——因为之前考虑的都比它小,不可能成为答案了。

说的很概括而笼统,是从这里(“讲题”的第一题(钟神出的题!))来的,感觉很强!

这个题是在树上,所以并非单纯从大到小考虑,而是dfs的过程中考虑。主席树维护覆盖和撤销覆盖(回溯时)操作。

思路都是:求某些元素中,符合条件的最小权值;二分后转为判断,是否权值<=mid的所有元素都不符合条件。

这里和这里

上两个都是noip的这个题:这里!

ZROI2021省选Day1T1

两个自然的想法,一个是预处理每个元素对其他所有元素的贡献 一个是对于每个元素直接快速算其他元素对它的贡献和(于是顺着这个思路想了好久的换根DP)。

然鹅还可以分别考虑每对元素(v,u)的之间贡献(考虑v对u贡献了多少 ——既不是先一个一个枚举所有v,考虑它对u的贡献 ——也不是一个一个枚举所有u,考虑所有v对它的贡献 而是按照某个顺序,把每对(v,u)都考虑到了——只是为了能做。

在树上,这个“某个顺序”就很可以是点分治了!分治的过程中,每次只考虑路径经过分治重心Rt的(v,u) ,而最终一定会把每对都统计到

ZROI 2021省选十连Day1T2

如单点带修求区间[l,r]中多少个数权值为x,当然不要憨憨地树套树,直接动态开点开n棵线段树就行了

4027 [NOI2007] 货币兑换

这里

序列妙妙值

最优化f[i][j]f[i][j]=\max(f[i][j-1],f[i+1][j],a(i,j))

如SAM上,求一个状态所有子串的最大值,可以去掉开头(跳fa),去掉结尾(是go指向它的那些点)的串的值取max。再和自己本身的值取max。

计数f[i][j]f[i][j]=f[i][j-1]+f[i+1][j]-f[i+1][j-1]+cst(i,j)

(分块时有用。。)

here

一个题https://codeforces.ml/gym/102391/problem/K笔记

还有这个T2

这里problem11

HDU6331。好像是在走边类型的问题中经常出现

这样就只和a+b,a,b有关了。组合意义可考虑两个点集之间的连边。用总的容斥掉内部的

一个例子是,,,NOIP2017普及组 跳房子

没 想 到 吧

还有这个T3

背后的原理可能是费用流/阿狸桃子/调整法/blahblah