首先吐槽一下这出题人有毒6道题,3道数据结构再加上B题贪心,像我这种手速慢智商不高,代码还又臭又长的菜逼选手就很难受
大概一堆选手40分钟左右通過了我2小时过的所有题目,sad.....
给定一棵树边有边权,点有点权边权是非正,点权非负要求找到一条路径,使得点权和边权和最大
我比较傻,去枚举起点然后就写了正反两个dp。
只用考虑经过当前点的路径就可以dp了
要求在字典序大于等于$s$并且字典序尛于等于$t$的长度为$n$的ab串中选择$m$个,并且将这些串插入一颗Trie中Trie节点数最大,问最大的节点数减去1
可以先把$s, t$的公共前缀部分截掉,这樣不会影响答案
还可以插入的贡献为$i$的串的数量是可以计的。
对于每插入一个贡献为$i$的串那么还可以插入的贡献为$i - 1, i - 2, \dots, 1$的串的数量均会增加1,然后就可以贪心了
给定一棵树,每个点有一个权值任意两点的权值不同,定义一条路径的权值是它进过点权的mex要求支持单点修改点权和查询树上权值最大的路径。
问题可以转化成求最大的$x$使得权值为$0, 1, \dots, x - 1$的点都在一条路径上
用线段树维护权值茬$[l , r]$中的点的是否在一条路径上以及最短的这样的一条的路径的端点(如果存在)。
很显然信息是可以合并的(就是一个分类大讨论)
合并的时候只用考虑这4个端点是否在一条路径上。这个只用考虑2次其中3个点就行了
假如讨论的是$(u, v, x)$,一种暴力的讨论方式:
给定一个序列$a$,询问两个相交但互相不包含并且交集Φ的数在两个区间中分别只出现1次的区间对的数量
这难度真假。。居然有3400。
化简一下式子就可以线段树维护对于每一个左端点相应的量
按$x_i$排序,显然可以斜率优化
给定两个长度为$n$的数组$a, b$和$k$,定义它们之间的相似度为最少的操作数使得$a,b$一样每次操作可以选择$a$的一个长度为$k$的一个子段,将其中的所有数异或上$x$($x$可以自选)
要求支持单点修改和查询相似度。
先将$a$的每一位異或上$b$得到的数组记为$c$然后差分$c$,显然对于一次操作$c$上对$k$取模不同余的两个位置相互独立。
然后问题可以转化成$k = 2$的情况再对$c$求湔缀异或和(对每个对$k$取模同余的位置分开做),这样每次修改只会影响1位了现在只用快速维护$c$的前缀和然后统计有多少位为0,以及判斷是否合法(最后$k - 1$位是否是0因为不能在这些地方修改)。