11.25总结

来源:互联网 发布:唐晓琳 知乎 编辑:程序博客网 时间:2024/06/05 16:37

T1:Matrix Recurrence

这样乘,我们发现是一个队列的乘,但是,很气的是,矩阵没有除法。那咋整啊?
我们有一个大法:用两个栈维护,遇到撤销操作时把一个栈中的元素全出栈,进到另一个栈中,这样,ans就是a1*a2,分析一下复杂度,每个元素进栈二次,出站二次,在这里只有n的复杂度。相当于没有改变。

T2:fold

强行暴力,但是注意如果有折过了的,就要换一下头尾。

T3:Paper

我们又来二分,问题很明显:就是连续的一段w区间。我们把高度逐渐增加,这样每次相当于只改了一个点,所以这样子二分是可行的。因为复杂度就是高度*log。

T4:Median on Binary Tree

就是使一些点去掉k个之后的中位数尽量大。那么这个有单减性,而且差值与n-k的奇偶性有关。所以这样一个dp,表示强行选他,那么我们也可以二分。二分时每加入一个点,就只用改rt到他的那一条链。可过。

T5:Independent Events

(我最喜欢的数学题!!)
就是这样的泰勒展开:ln(1+z)=zz22+z33+(1)nzn+1n+1+|z|<1
然后将原式取对,只算前几项。(证明:先求导,变成证11+z=1z+z2+(1)nzn+|z|<1,然后后者则是好证的)。

T6:Welcome to ICPCCamp 2017

题很绕,实际上就是一个一个加入答案,然后bit维护。

T7:Lowest Common Ancestor

算答案是,每个点的贡献就是在他之前的点被走了几次,而且我们注意到这是链上的。所以考虑连剖,我们使一个点与他的重儿子查分,然后跳的时候只用该轻儿子以及重链的末端,所以是log的。

T8:LYKMUL

注意式子,就是他们的交乘上并。我们假设(A,B)为一个点对,那么他们产生贡献的是2^y-2^y-x,其中y是含A的,x是都含的。对于一个A,其y是定值,所以可以提一个2^y,从而维护2^-x。所以我们可以用线段树维护,扫到一个点时删去其结尾的,加上其开头的。(这道题算个逆元)

T9: Longest Path

点分治大法!
我们想如何合并子树,应该是满足几个式子的路径相合并,那么我们考虑如何快速的求得。这样:如果那一端取max,这端取min,就得到一个只与min有关的式子,可以线段树上查。反之也是。但是这样取不了完全包含的情况,所以我们再从右向左扫一遍。

T10:Subsequence Count

如果没有取反与区间,我们可以得到一个O(n)的dp。(假设当前位是0):
f[i][0]=f[i1][0]+f[i1][1]+1
f[i][1]=f[i1][1]
我们先考虑区间。这是一个一次的转移,我们有可以那一个矩阵来乘,这样区间就解决了。那如何取反呢?我们有这个结论:取反就是左乘或右乘一个单位阵的变换。乘的取反等于乘后取反。所以解决了。

总结:

对于树的路径,可以考虑点分治。

原创粉丝点击