Loading

8月做题记录

感觉再不写做题记录会废的

这个博客用惯了,懒得再用原来那个写了

Latex不是很会,应该会比较乱

  1. CF1995D

首先可以转化一下题意,变成先选出一个字符集(必须包含字符串的最后一个字母),使得字符集里的字母在字符串中的位置前后相差不超过k,询问字符集的大小最小为多少

加上字符集<=18,这个时候应该能想到跟二进制枚举相关。但枚举符合条件的情况复杂度要炸,于是我们考虑不符合条件的情况,即某一段连续k个字符都不在我们枚举的字符集中,这时这个字符集就是不合法的,那么对于每一段连续的k个字符我们都把它用二进制表示出来,记录到数组里面,表示同时没有这些字符的字符集是不合法的,接着我们在记录的数组里做一个高维前缀和,最后二进制枚举每一个没被标记的点,用ans对他们1的个数取min,这道题就做完了

  1. P3899

答案由两部分构成

  • b在a的上面,此时可以直接算: \(\min (K,depth[a]) \cdot size[a]\)

  • b在a的下面,每个点以dfn为root下标,dep为树内下标开一颗线段树(动态开点),遍历树的时候把它变成一个类似前缀和的东西,即dfn[u]的树以dfn[u]-1的树为基础在dep[u]的位置+(sz[u]-1),然后询问直接回答root[dfn[p]+size[p]-1]的树减去root[dfn[p]-1]的树在dep[p]+1到dep[p]+K上的贡献即可。

  1. P2824

分裂合并线段树,以值域作为树的下标,再用个set辅助一下就做完了

  1. AGC002D

Kruskal重构树

直接重构以后求lca,然后二分往上跳,由于有单调性所以是对的,然后就做完了

  1. P6018

给定一棵树,三种操作:

  • 将一个点的相邻节点的值全部+1

  • 单点-x

  • 查询相邻节点值的异或和

看到异或容易想到trie

每个点开一个trie,但是trie上只需知道某一位上0,1的奇偶性即可,所以开 \(N*log*2\) 就够了,然后就是常规维护trie即可,只不过这里的父亲单独维护,儿子们一起维护

posted @ 2024-08-28 08:39  FurukawaNagisa  阅读(7)  评论(0编辑  收藏  举报