若我们并肩作战,你要照顾好自己哦?|

xingyu_xuan

园龄:1年6个月粉丝:13关注:1

浴火时的赛季末

挣扎消失了。

20240625

T1 我是最大智障。我想了一些什么 DDP,但是答案是 u2sizumod2,其中 sizu 表示在 u 子树内有多少个叶子。链异或,极为简单。

T2 我是最大勾矢。我一直在想怎么去描述后面所有数的优与不优,但是我忘了贪心就是一位一位的。。。非常搞笑。建出 01-Trie。

因为要选完,所以遇到 1 子树的个数小于 k1 的时候,我们一定选完所有 1 子树的数,在 Trie 上统计数和极为容易。然后递归 0 子树。

如果遇到 1 子树的个数大于等于 k1 的时候,为了选最多的 1,我们一定选 k11,所以 0 子树的数在最终答案中一定会被与在一起。所以我们求出与的结果,然后把数记下来参与后面的位的比较,因为后面的 0,1 比较已经跟该位没有关系了。递归 1 子树。

具体地,每次把需要记下的数或上当前位插入到 Trie,因为这样等同于我们把前几位的贡献已经算完,所以在后面几位中,与后的值和正准备遍历的子树是等价的。这一步非常妙,因为它正好也能表示接下来的与运算。

最多 O(logV) 层,故最多有 O(logV) 个数。所以复杂度为 O(nlogV+qlog2V)

唯一的问题就是删除怎么求子树 and。我开始想的是按位统计,空间双 log,但是一个简单的思路是合并两个子树,每次删除完就向上取 and 更新,单 log,但是有个细节就是,好像最后的数要修改成 2301

20240629

/shui

T1 分治 + (max,+) 卷积决单优化即可。

T2 DP 套 DP/fn,注意到我们只需要关注层级值,然后如果两相等层级值点对路径之间没有小于该层级值的点,那就非法。树上 DP,状压子树能走到路径的前缀最小值集合。合并时如果两集合存在交那就挂了。O(3n) 枚举子集合并即可。

T3 shabi 容斥。好像开头是什么二项式反演,然后之后钦定一个选不交边顺序(因为我们发现选的时候有多少条当时的情况下两端点度数均为 0 的边,就有多少个连通块),最后发现拓扑序是一棵树,然后有一个随机排列在树上的结论:

随机排列满⾜树形拓扑序的概率是⼦树⼤小的倒数乘积。

然后推一下式子就 OK 了。

20240703

lxl。

T1 区间子区间问题,扫描线,线段树维护 [1,i] 的 LCA 编号和,然后发现线段树上的元素的深度有单调性,线段树上二分就能找到新加入元素之后的覆盖区间,使用区间覆盖,区间查询历史版本和的线段树即可。然后场上我认为推不出来标记,最后还是矩阵辅助推标记转移。只需要维护矩阵中值可能变的位置即可。

T2 线段树分治,1,2 操作都比较好分治,3 操作不知道是怎么分治的。然后考虑询问如何处理。考虑维护一个关于 u 的多项式(最多 4 项),然后对于 +x 这个东西维护 aj+ku+p 的卷积(p[0,u))。维护每个 p,最后带入 x 就能维护了。

总时间复杂度为 O(nlogn(logn+uv2))

T3 shabi DP(场上所有人都以为是 DS...)考虑一种类似于 floyd 的转移方式,但是我们需要最短的合法括号序列,所以我们设 fi,j 为从 ij 的最短合法括号序列长度,设 gi,j 为从 ij,多一个左括号的最短括号序列长度。每次提最小的来转移就行了。时间复杂度 O(n3logn)

20240707

离谱 lxl,但是 lxl 要走了/ll

T1 神秘,H_W_Y 的做法好像就是把我两个在考场上胡的假做法拼了起来。离谱的是,我甚至根本没有想到 ax=2x×log2(a),然后你会发现只需要把这个东西一直做,然后直到指数 [1,2),然后直接排序(先幂次次数,再最后指数的近似),最后近似相等的就看谁先出 3。有点离谱这个做法。

T2 考研数学。什么矩阵的合同。过于离谱。

T3 什么巨大分块或者根号分治(对每次询问区间个数),没太听懂。

20240708

勾矢模拟赛,太强悍了,还是先补知识点为强。

T1 巨大神秘题,利用 O4 优化我们可以知道短的那个子序列就是一个前缀加一堆 0,然后应该就可以直接做了。

T2 极端神秘。

大概是维护一个极长子区间,然后区间合并。设 dpn,m 为区间长 n,还有 m 条非链边没连的方案数,然后 gn,m 为区间长为 n,还有 m 条非链边没连,但是可以从 m+1 条非链边没连的状态转移过来。dpg 是容易的。

然后我们枚举区间长合并 dpn,m。注意到合并的时候会多出 i(ni)1 条非链边没连,然后在此基础上我们枚举 p+q+i(ni)1=m,然后从 gi1,pgni,q 转移过来就行了,因为带个标号所以要带一个神秘的重新分配标号的组合数(EGF 好像会用到?那可以放在之后的路上),然后这个是 O(n6) 的。

然后这个东西是卷积,直接就结束了。

T3 巨大离谱东西根本看不懂。

20240712

DS round,场上最傻逼。

T1 把二叉搜索树拆成合法中序元素对。然后随便 BIT 统计一下,最后修改的时候套个倍增求出最近的不可行的子树即可。复杂度 2log。

T2 扫 j(场上一直在扫 k,小丑),然后我们发现对于每个 i 合法的 k 是一个区间,具体地,其左端点的限制为左区间的所有东西都必须在右区间出现,其右端点的限制为右端点不能出现左区间没有的东西,我们分别设其为 fi,gi

不难发现 fi 是降序的,gi 也降序的,我们加入一个元素的操作相当于对两个数组全局取 max,我们每次需要统计 imax(0,gifi+1)。你会发现上面的所有操作都可以用线段树二分和线段树覆盖做。复杂度单 log。

T3 场上最大小丑。我认为区间 DP 怎么优化都不可能优化至低于 O(n2),然后就直接去想贪心了,然而这道题正解是区间 DP 的一些优化。

这个题其实更贴切的表述是合并区间,因为好像我们只需要记录左右端点就不需要讨论拼接顺序。

我们发现有一个简单的 DP,即设 fl,r 表示区间 l,r 的答案,而在合并区间的时候,我们实际上可以记录 [l,r],[l+1,r],[l,r1],[l+1,r1] 的答案,然后记录左右区间是什么,然后就可以 O(n2) 转移。

然而我们发现这样做是不需要讨论区间 DP 的精髓:即区间从哪里拼接,因为 [l,r] 从任意子区间转移过来的答案应该都是一样的。然后就结束了,把这个东西扔上线段树,扫 k,每次把一些数变成 01,每次合并出来的就是答案。

注意到需要判无解,直接暴力判每个 0 即可。然后你会发现 0 其实是一个分界点,对于其他所有区间询问一遍然后合并即可。时间复杂度单 log。

20240713

T1 我是最大傻逼。打表找出来的规律和正解大相径庭。

正解是注意到若 2|m,我们可以得到谁先选 B 谁倒霉,所以我们都是先选完 A,然后全部选完 B。然后对于 2m 的情况枚举第一次选 B 是什么时候,然后即刻转化为 2|m 就可以做了。代码懒得写了。

T2 推式子。第一次用生成函数和莫反用对位置了,然后你发现我不会单位根反演。而且我把单位根的很多性质都忘了,FFT 白学了。接下来是推式子的过程,然后代码就是预处理一下,去掉 μ(x)=0 的情况,就能做到 O(T(212×12+nlnn)+n),可以通过,作者懒得写了,因为推式子就很累了。

首先列出互异的分拆数的生成函数:F(x)=i=1n(1+xi)

然后列出题中需要我们求的和与 n 互素的方案数式子:

i[gcd(i,n)=1][xi]F(x)

这个东西可以暴力拆莫反:

=i(d|n,d|iμ(d))[xi]F(x)=d|nμ(d)d|i[xi]F(x)

然后后面那一部分是可以用单位根反演做的。

单位根反演的某种形式:i=0m[d|i][xi]F(x)=1di=0d1F(ωdi),其中 F(x)=i=0mFxxi

然后就可以变成 d|nμ(d)di[d|i][xi]F(x)=d|nμ(d)di=0d1F(ωdi)

拆开 F(ωdi),我们发现我们实际上只需要化简下面的式子:

i=1dk(1+ωdik)

后面那一部分显然是有循环节的,循环节长为 dgcd(i,d)。我们把循环节拉出来看,设 p=gcd(i,d)

i=1d(k=1dp(1+ωdkp))npd

单位根的上标是 kp 是因为它本来就能表示整个整除系。

然后我们把 p 提出来:

=p|d(i=1d[gcd(i,d)=p])(k=1dp(1+ωdkp))npd=p|dφ(dp)(k=1dp(1+ωdkp))npd=p|dφ(p)(k=1p(1+ωdkdp))np

后面就是利用单位根 ωddp=ωp1i<n(xωni)=xn1 的性质,把式子化简,然后去除中间的一些过程,得到整个答案的式子:

d|nμ(d)dp|dφ(p)p2np

剩下的式子可以参照知乎回答,作者脑子已经很晕了。

T3 牛逼期望题。接下来就是选几道数位 DP 然后就回家睡觉了。

注意到 m5,不难想到维护每一行的信息。

然后稍微换一下期望的式子就能发现,我们可以通过设立两行的所有元素为元,即设 2m 个元素为元,然后就能递推出剩下的所有元素(当然是没到终点的前提下)

然后我们维护这个东西,假设 0n1 行为主元,从左向右递推出所有元素的线性表示即可。然后不难发现修改易做,只要我们每个节点表示的是 a1,a 行转移到 b,b+1 行。

然后询问的时候,因为有终点的存在,我们对终点要特殊处理。我们询问 [0,tx] 的所有元素,然后修改 tx+1,ty 左右的元素,减去从 tx,ty 转移过来的贡献,然后再把 tx+1,ty 设成一个主元,因为到头了不能再走。然后就再询问 [tx+1,n] 合并即可。

然后高斯消元一次得到所有主元的值,询问 O(1) 次得到起点的线性表示,然后就做完了。

因为有点赶,然后想睡觉,所以我本来想找到 m=1 的原来写一下,但是没找到,遂弃。

???

T1 是 vnoi。问的是一个子段满足其和减去段中前 k 大元素的最大值。

考虑枚举第 k 大,从小到大删除数,每删除一个数,就把这个数前 k 个位置和后 k 个位置组成的 O(k) 个长度为 k 的子段的答案更新。注意到这个子段需要加上左边的最大后缀和右边的最大前缀。但是正好是删数,我们可以区间最大子段和类似的方法合并两个子段的最大后缀和最大前缀。用链表维护前后 k 个,时间复杂度 O(n)

本文作者:xingyu_xuan

本文链接:https://www.cnblogs.com/xingyuxuan/p/18267238

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   xingyu_xuan  阅读(39)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起