- 博客(9)
- 收藏
- 关注
原创 代码源国庆模拟赛
对于一整个区间没有 “还有存货”->“存货为空” 则直接对区间打标记整体操作,如果有则往下递归,对于会被买空的点单点暴力修改,在暴力修改后做上标记标志以后永远不会出现"还有存货"->“存货为空”的情况因为现在存货已经为空了;,(tag 的定义就是大连通块中会删掉多少个点,而点的位置不确定),就认为两边的连通块所有的点都可以通过当前枚举的这条边,答案加上该边的贡献,结束枚举。求出每个连通块的包含的点集应该是在 dfn 序上的一个区间(对应 u 的子树),其中去除若干个子区间(对应去除的 v 的子树);
2025-10-13 14:09:23
294
原创 2025 贵阳 代码源 Day 7 模拟赛
剩下的就只有单点修改和区间查询,修改好维护,查询时考虑像最大子段和一样用一个 merge 将左右两个子树的答案合并在一起,merge 的写法和 push_up 一模一样,这样便做完了。就炸了,否则找有没有一个不同种的字符,使它后面的字符也是不同种的,或者使得这个字符后面的与连续段相同种类的字符的连续段长度。的连续段就一定可以,判完这两种情况剩下的只剩下只有一种字符出现了一个这样的连续段,如果这个连续段长度。,第一个长度能满足我们二分的值的连续段的开始位置,这样转移就成了。可以想到暴力容斥做,分别求出包含。
2025-08-02 16:12:00
862
原创 2025 贵阳 代码源 Day 6
看到回文想到 manacher,发现合并只会从左一直连续合并到某个点同时从右一直连续合并到某个点,可以发现两者互不干扰,便分别统计出左端点可能的位置和右端点可能的位置,枚举其中一个对另一个二分即可。,如果多次重复还是会炸,于是使用 kmp 自动机,也就是我们将普通 kmp 的。用栈,栈中的元素表示还剩下的元素,只在栈上跑 kmp 就好,记录下每个。把题目的拆分操作理解成循环重构就好做了,发现可以 dp,做哈希的底数,双带模就能防止哈希冲突。,当在栈上发现有匹配之后就弹出栈顶的。发现正常 kmp 只是均摊。
2025-08-02 16:11:19
1002
原创 2025 贵阳 代码源 Day5 模拟赛
同一组中或独立开成一组,这样我们就可以把所有包含其它区间的区间去除掉,只用考虑没有包含其它任何区间的区间。又发现因为这些剩下的区间肯定互不包含,所以我们将剩下的区间按左端点排序后右端点也将是有序的。再剩下的直接合并到其包含的区间中的随便一组就好,不用考虑这部分。有了这两个性质之后我们就可以开始 dp 了,先只考虑剩下的区间将其排序,用。最大的玩偶,就在线段树上二分,保证前缀玩偶数量不超过已选的最大。接下来考虑之前排除掉的区间,按照之前的想法,我们枚举。组,接下来考虑最长的之前排除掉的。
2025-08-02 16:10:16
631
原创 2025 贵阳 代码源 Day 2
可以发现每次操作一定会选择当前a中的最大值以及另一个值,我们对a排序,并枚举i1→n−1选择i和n作为第一次操作的两个值,这样就确定了第一次x的值,按照题目要求操作完整个a,单次整轮复杂度Onn轮总复杂度On2。
2025-08-02 16:09:37
912
原创 2025 贵阳 代码源 Day 7 模拟赛
改成 $f_i$ 表示完成字符集合 $i$ 所用的最短前缀,再用一个 $d_{i,j}$ 表示从 $i$ 出发,字符为 $j$,第一个长度能满足我们二分的值的连续段的开始位置,这样转移就成了 $f_{i|j}\gets d_{f_i,j}+x$,这里我们每次二分预处理 $d$ 数组复杂度 $O(nk)$,总复杂度 $O(nk+2^k)$。发现 $mnt$ 和 $edt$ 同理,只是取 $\min$ 并减去前缀,便为 $mnt=\min(mnt_{lson},mnt_{rson}-sum_{lson})$。
2025-07-31 17:01:28
321
原创 2025 贵阳 代码源 Day 6
发现正常 kmp 只是均摊 $O(1)$,如果多次重复还是会炸,于是使用 kmp 自动机,也就是我们将普通 kmp 的 $fail_i$ 数组改成 $nxt_{i,w}$,表示 $i$ 的下一个字符是 $w$ 时的 $nxt$,这样单次复杂度 $O(w)$,对每个 $t$ 单独做即可。用栈,栈中的元素表示还剩下的元素,只在栈上跑 kmp 就好,记录下每个 $i$ 对应的 $j$,当在栈上发现有匹配之后就弹出栈顶的 $|T|$ 个元素然后接着新的栈顶继续跑 kmp.
2025-07-31 17:00:45
151
原创 2025 贵阳 代码源 Day5 模拟赛
有了这两个性质之后我们就可以开始 dp 了,先只考虑剩下的区间将其排序,用 $f_{i,j}$ 表示在前 $i$ 个区间中已经完成了 $j$ 组,总和是多少,转移 $f_{i,j}\gets \max(f_{k,j-1}+r_{k+1}-l_i+1),r_{k+1}\ge l_i$,因为要保证全部有交 $r_{k+1}\ge l_i$,所以考虑单调队列优化。把丢到的最小改成选的最大。发现到达点 $v$ 的最短时间就是 $dis_v\gets\max(a_v,dis_u+1),u\to v$。
2025-07-31 17:00:11
270
原创 2025 贵阳 代码源 Day 2
差分询问,变成 $\sum\limits_x^\infin get(r_1,x)\times get(r_2,x) - \sum\limits_x^\infin get(l_1-1,x)\times get(r_2,x) - \sum\limits_x^\infin get(r_1,x)\times get(l_2-1,x) + \sum\limits_x^\infin get(l_1-1,x)\times get(l_2-1,x)$,显然可以拆成四个询问后莫队,结束。
2025-07-31 16:57:09
258
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅