07 2018 档案

摘要:一个字符串本质不同的子串数量显然是总子串数减去所有height值。如果一个个往里加字符的话,每次都会改动所有后缀完全没法做。但发现如果从后往前加的话,每次只会添加一个后缀。于是我们把字符串倒过来,每次往里添加后缀并维护答案。可以用一棵平衡树,每次插入时查询这个名次的前驱后继以更新。 SA板子敲得磕磕 阅读全文
posted @ 2018-07-31 10:18 Gloid 阅读(232) 评论(0) 推荐(0)
摘要:能看懂题就能想到正解。维护所有长度不超过k的数字串的哈希值即可,用链表维护一下蚯蚓间连接情况。由于这样的数字串至多只有nk个,计算哈希值的总复杂度为O(nk),而分裂的复杂度为O(ck^2),询问复杂度为O(Σ|s|)。于是总复杂度为O(nk+ck^2+Σ|s|)。 手写哈希注意插入元素时考虑清楚, 阅读全文
posted @ 2018-07-30 21:55 Gloid 阅读(220) 评论(0) 推荐(0)
摘要:A:签到 B:用不上位运算的各种性质,开个桶记一下能不能对应上就好。 C:容易发现横坐标或纵坐标选取连续的一段最优。枚举横/纵坐标选取的起始位置就好。 貌似写这三题时达到的最高排名是十几名,有点小膨胀2333 然后看D,完了没啥思路啊。赶紧跳E。 咦这不是随便dp一下就好吗。码码码。 啊好像不太对… 阅读全文
posted @ 2018-07-30 20:22 Gloid 阅读(749) 评论(5) 推荐(0)
摘要:显然每个点会提供相同的贡献。于是现在只考虑1号点的贡献。若其度数为i,则在2~n号点选i个连上,剩下的边随便连,这样可以算出答案为 这个式子可以O(n)计算。发现k比较小,于是考虑如何将这个式子化为与k有关的求和。 显然前面一部分可以直接提走。考虑后面一部分的组合意义:n-1个有标号盒子里面选i个, 阅读全文
posted @ 2018-07-30 13:22 Gloid 阅读(217) 评论(0) 推荐(0)
摘要:和区间众数几乎一模一样的套路。 阅读全文
posted @ 2018-07-29 22:08 Gloid 阅读(170) 评论(0) 推荐(0)
摘要:区间众数。分块,预处理任意两块间所有数的众数,和每块中所有数的出现次数的前缀和。查询时对不是整块的部分暴力,显然只有这里出现的数可能更新答案。于是可以优美地做到O(n√n)。 阅读全文
posted @ 2018-07-29 21:40 Gloid 阅读(166) 评论(0) 推荐(0)
摘要:一个很显然的思路是把边按时间段拆开线段树分治一下,用lct维护MST。理论上复杂度是O((M+Q)logNlogQ),实际常数爆炸T成狗。正解写不动了。 阅读全文
posted @ 2018-07-29 20:15 Gloid 阅读(283) 评论(0) 推荐(0)
摘要:发现所谓半连通子图就是缩点后的一条链之后就是个模板题了。注意缩点后的重边。写了1h+真是没什么救了。 阅读全文
posted @ 2018-07-29 16:37 Gloid 阅读(243) 评论(0) 推荐(0)
摘要:易知所求的是两棵子树大小的乘积。先建出最后所得到的树,求出dfs序和子树大小。之后考虑如何在动态加边过程中维护子树大小。这个可以用树剖比较简单的实现,但还有一种更快更优美的做法就是线段树合并。对每个点开权值线段树,维护当前时刻这棵点为根的子树中,已经和其相连的点的dfs序情况。合并时直接将表示两棵子 阅读全文
posted @ 2018-07-29 15:16 Gloid 阅读(206) 评论(0) 推荐(0)
摘要:显然子树内的操作不会对子树外产生影响。于是贪心,若交换之后子树内逆序对减少就交换。 这个东西可以用权值线段树计算。操作完毕后需要对两棵权值线段树合并,这个的复杂度是两棵线段树的重复节点个数。那么总复杂度不太显然的是O(nlogn)。因为相当于把n个只有一个叶子的线段树合并在一起。 阅读全文
posted @ 2018-07-29 12:05 Gloid 阅读(185) 评论(0) 推荐(0)
摘要:构造线性基后将其消至对任意位至多只有一个元素该位为1。于是就可以贪心了,将k拆成二进制就好。注意check一下是否能异或出0。 阅读全文
posted @ 2018-07-29 00:25 Gloid 阅读(355) 评论(0) 推荐(0)
摘要:用LCT维护一下删除时间的最大生成树即可。当然也可以线段树分治。 阅读全文
posted @ 2018-07-28 23:28 Gloid 阅读(650) 评论(0) 推荐(1)
摘要:上一题的强制在线版。对图跑出一个dfs树,给非树边赋上随机权值,树边的权值为覆盖他的非树边权值的异或。这样如果某条树边和覆盖他的非树边都被割掉(即图不连通),他们的异或值就为0。每次对询问看有没有子集异或值为0即可,可以简单地用线性基搞定。 阅读全文
posted @ 2018-07-28 16:32 Gloid 阅读(319) 评论(0) 推荐(0)
摘要:把查询看做是在一条时间轴上。那么每条边都有几段存在时间。于是线段树分治就好了。 然而在bzoj上t掉了,不知道是常数大了还是写挂了。 以及brk不知道是啥做数组名过不了编译。 阅读全文
posted @ 2018-07-28 14:57 Gloid 阅读(257) 评论(0) 推荐(0)
摘要:一直不明白为什么要用floyd求传递闭包,直接搜不是更快嘛……不过其实可以用bitset优化,方法也比较显然。bitset是真的神奇啊,好多01状态且转移相似的东西都可以用这个优化一下。 阅读全文
posted @ 2018-07-28 12:48 Gloid 阅读(250) 评论(0) 推荐(0)
摘要:之前学了一下线段树分治,这还是第一次写。思想其实挺好理解,即离线后把一个操作影响到的时间段拆成线段树上的区间,并标记永久化。之后一块处理,对于某个节点表示的时间段,影响到他的就是该节点一直到线段树根的所有操作。(语死早)这样可以把操作的插入和删除改为只有插入。 具体到这题,由于并查集没法删除边,我们 阅读全文
posted @ 2018-07-28 12:11 Gloid 阅读(212) 评论(0) 推荐(0)
摘要:WARNING:本文存在大量口胡,请谨慎食用 参考:刘汝佳《算法竞赛入门经典——训练指南》 似乎一直没真正理解这些东西,于是apio考场上根本写不出来(当然写出来了其实也不会)。于是再学习一发。 dfs树 即在图上dfs所得的树。由于是图上遍历会有一些非树边。无向图中仅包含树边和反向边(树枝间不会有 阅读全文
posted @ 2018-07-27 18:30 Gloid 阅读(924) 评论(0) 推荐(0)
摘要:搬运一下之前在luogu blog写的。 参考http://picks.logdown.com/posts/177631-fast-fourier-transform 废话不写了。首先补零将多项式项数补为2的整数次幂。下标均从0开始。 DFT(递归版) 将系数表示转为点值表示。设项数为n,即求多项式 阅读全文
posted @ 2018-07-27 18:27 Gloid 阅读(285) 评论(2) 推荐(1)
摘要:总算正经开了个博客www 阅读全文
posted @ 2018-07-27 18:22 Gloid 阅读(217) 评论(0) 推荐(0)