- 博客(42)
- 收藏
- 关注
原创 做题计划3
[ROI 2017] 学习轨迹 (Day 2)很牛的题,首先我们考虑暴力,枚举 AAA 或者 BBB 序列的一个区间,然后看另一序列中没有出现过选的区间中最大连续段的和。图例:解释:假设我们选了 AAA 中红色部分的点,然后绿线表示 AAA 中那些数在 BBB 中出现过,这个时候我们只能选每两个绿点之间的点(不能包括绿点)这样才能满足题意,这个东西可以通过一些预处理得到每个数 AAA 在 BBB 中出现的位置,然后每次一个区间,右移右端点的时候,把绿线原来所对应的区间劈开分成两半重编号可以实现,然后放到一
2025-04-27 07:49:17
574
原创 做题记录2
[ROI 2017] 学习轨迹 (Day 2)很牛的题,首先我们考虑暴力,枚举 AAA 或者 BBB 序列的一个区间,然后看另一序列中没有出现过选的区间中最大连续段的和。图例:解释:假设我们选了 AAA 中红色部分的点,然后绿线表示 AAA 中那些数在 BBB 中出现过,这个时候我们只能选每两个绿点之间的点(不能包括绿点)这样才能满足题意,这个东西可以通过一些预处理得到每个数 AAA 在 BBB 中出现的位置,然后每次一个区间,右移右端点的时候,把绿线原来所对应的区间劈开分成两半重编号可以实现,然后放到一
2025-04-27 07:47:05
721
原创 做题记录1
NOIP2024T1编辑字符串本题考察贪心。直接贪心就是对的,我们令段表示一段区间可以互相交换的位置所成的连续段,也就是那些连续为 的段,那么我们把 idiid_iidi 表示第一个序列的第 iii 个点所对应的段的编号, ideiide_iidei 表示第二个序列第 iii 个点所对应的段的编号,那么记录每个段还剩余多少个 和 然后能匹配就匹配,使得匹配数加一,否则就不能匹配。代码NOIP2024T2消失的赋值首先,我们发现直接计算合法的贡献是有点难的,正难则反,我们考虑不合法的然后用总的方案数
2025-04-27 07:46:26
846
原创 KTT入门
从小到大的顺序来建线段树,然后直接前缀加,全局查找最大值,即可。的那就最大值不会发生变化,否则把标记修改下传,势能分析得均摊。首先,求当前区间中函数值最大值直接将两个儿子最大值取个。的组合,因为这样才不会浪费,就是可以把等于贡献算进去。加一,这是个类似权值线段树就能干的东西,我们按照。这个东西最大,然后显然这个东西形如。然后修改的时候如果此时要加的值是。为第一关键字排序,这样我们钦定。的东西,我们令当前线段树区间。表示当前线段树节点下,如果讲。中函数值最大的线段是。的,线段树还维护一个。
2025-04-26 21:41:08
1085
原创 树状数组详解
树状数据结构,通常维护一些带有差分性质的区间问题,比如单点加,单点乘,查询区间和,前后缀最大值、最小值等。线段树得以快速修改和查询在于下传懒标记,而树状数组则是每次修改时,将标记上传,查询的时候不用像线段树一样每次 。区别之处在于标记传送的方式的不同。树状数组的图示:和线段树不同,我们定义一个点,其儿子的范围(就是存的哪一个区间的范围)是 [i−2k+1,i][i-2^k+1,i][i−2k+1,i] 其中 kkk 是 iii 二进制下从后往前第一个为 111 的位置,下标从0开始计算,我们称这个值为 l
2025-04-26 21:39:52
1123
原创 初始网络流(最小割)
都加上等量的流量,以令整个网络的流量增加,这一过程被称为增广(Augment)。的增加——这也与退流的意义相吻合——反向边剩余容量的增加意味着我们接下来可能通过走反向边来和原先正向的增广抵消,代表一种「反悔」的操作。上,平凡地,我们假设每次增广的流量都是整数,则 Ford–Fulkerson 增广的时间复杂度的一个上界是。将单轮 BFS 增广的复杂度与增广轮数的上界相乘,我们得到 Edmonds–Karp 算法的时间复杂度是。的绝对值是无关紧要的,我们可以将反向边流量的减少视为反向边剩余容量。
2025-04-26 21:38:45
666
原创 数学基础-整除和不定方程超详解
首先考虑无整数解的情况,根据贝祖定理,对于。所以不用担心是不是整数的问题。的特解,但是因为贝祖定理得。所以,对于任意整数对。
2024-04-14 13:10:40
999
原创 数据结构-堆详解
图片:二叉堆的父节点为这个子树的最值。如何维护它。我们发现它是一棵二叉树,那就自然满足若父节点为 xxx 则左儿子节点为 x×2x\times2x×2 右儿子为 x×2+1x\times 2 + 1x×2+1 这是显然的,但如果写成指针或结构体就太麻烦了,所以考虑用数组来维护它。用一个数组 TTT 来存储这颗二叉树,根节点为 T1T_1T1 根据二叉树的性质对于每个子节点 xxx 则有:这样做由于二叉树只有 log2n\log_2nlog2n 层,自然单次复杂度为 O(log2n)O(\log
2024-04-14 13:08:50
644
1
原创 ABC344E
当然也可以使用离散化来实现,具体的把所有的数来读入,排序后然后二分查找下标最后只会用。很大所有不能用数组,可以用。的大小的空间,复杂度也是。
2024-04-14 13:05:00
907
原创 进阶分块-分块二分详解
可以把每一个块内的元素排序,然后整块时直接二分答案,散块暴力处理,这样就能将时间复杂度降至。但这样是不容易过的,因此继续考虑优化它,不难想到,当整块时,块长越大,是基本不变的,但是可以减少块的数量,因此我们可以将块长设为。不难想到暴力,可以做到每次操作。每次询问给出三个整数。如果用分块该如何实现呢?这样做复杂度可以近似。
2024-04-14 13:02:06
971
原创 线段数:基础-进阶 原创超详解
树链剖分是一个常见的线段树与重链之间的组合的算法,他的思想是对于每一条链和一个子树,它在线段树上的标号总是连续的因此就可以用线段树的相关知识去实现快速的加减求和。每次维护一个区间的信息就会通过零块暴力,整块直接对这个块做标记,其实这个标记和线段树的懒标记是一样的道理。我们可以发现其实线段树就是将几个连续的小区间拼凑成一个个大区间的过程,从而实现查找时的优秀的复杂度。1.修改时如果是当前的区间完全覆盖线段树某一个节点所对应的区间,那么就将这个节点的。所对应的区间的每一个数的值统一加上。
2024-04-14 12:51:44
1723
1
原创 ABC346G
具体地,维护区间内最小值及其个数,查询时若区间最小值为。的矩形来计算重合的部分,(只不过是一维的)也可以用二维线段树的区间赋值,于是答案即为重合部分的面积,复杂度为。那么这个拓展的区间也是合法的区间。然后发现这个并集大小的维护实际上是要我们支持区间加 / 减查询区间非。都满足,同理右端点也一样,所以由乘法原理得所有满足的区间个数有。,则返回区间长度减去最小值个数,否则返回区间长度。扫一遍然后进行每个区间的特判即可,复杂度。应该满足的条件,显然,当有一个数。的出现次数有且仅出现一次。同理,往后的区间会是。
2024-04-14 12:49:08
532
原创 exgcd
但是这么做只能求出 $ax+by=\gcd(a,b)$ 的特解,并不能求出 $ax+by=c$ 的特解,但是因为贝祖定理得 $c=k\times\gcd(a,b),k\in Z$ 所以将两边同时乘 $c/\gcd(a,b)$ 因为 $c\mod\gcd(a,b)=0$ 所以 $c/\gcd(a,b)\in Z$。又因为 $x,y\in Z$ 所以 $x\times(c/\gcd(a,b))\in Z$ 同理 $y\times(c/\gcd(a,b))\in Z$。即:如果 $c\mod\gcd(a,b)!
2024-04-10 18:42:37
465
原创 数学基础1
但是这么做只能求出 $ax+by=\gcd(a,b)$ 的特解,并不能求出 $ax+by=c$ 的特解,但是因为贝祖定理得 $c=k\times\gcd(a,b),k\in Z$ 所以将两边同时乘 $c/\gcd(a,b)$ 因为 $c\mod\gcd(a,b)=0$ 所以 $c/\gcd(a,b)\in Z$。又因为 $x,y\in Z$ 所以 $x\times(c/\gcd(a,b))\in Z$ 同理 $y\times(c/\gcd(a,b))\in Z$。即 $B$ 是 $A$ 的倍数。
2024-04-10 18:37:59
479
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅