摘要: 数论 线性筛 枚举倍数 int p[N], f[N], idx; void sieve(){ n = read(), f[0] = f[1] = 1; for(int i = 2;i <= n;i++){ if(!f[i]) p[++idx] = i; for(int j = 1;j <= idx 阅读全文
posted @ 2025-01-18 09:56 Hirasawayuiii 阅读(103) 评论(0) 推荐(1)
摘要: abc426 题解 abc426 赛时 ABCD,E 被卡精度卡了30min,21:41 改为 long double 过了 /ll A 水题,懒得写 B 同上 C 拿树状数组硬跑,每次记录当前的 \(x\) 的最大值(即当前序列最大值) for(int i = 1; i <= n; i++) ad 阅读全文
posted @ 2025-10-05 11:48 Hirasawayuiii 阅读(20) 评论(0) 推荐(0)
摘要: [线段树系列 #6] 标记永久化 标记永久化是线段树的一个技巧,通常用于对主席树等难以 pushdown 的数据结构进行区间修改 具体思想已经体现在名字里了,我们结合例题稍微讲解一下 例题1 P3372 【模板】线段树 1 线段树区间修改区间查询板子 void modify(ll p, ll l, 阅读全文
posted @ 2025-09-29 19:10 Hirasawayuiii 阅读(10) 评论(0) 推荐(0)
摘要: 网络流的一些简略笔记 因为内容太多,写不动博客了,故只在这里记录一下一些小笔记 待补 马上退役了 估计也学不了更往后的了 大概率考场上也不会见到了 从学习算法更多的要转为刷思维了 概念 \(c\) 为容量,\(f\) 为流量,代入类似水管的现实情境感性理解 \(f\) 的性质: 流量不超过容量,\( 阅读全文
posted @ 2025-08-22 09:52 Hirasawayuiii 阅读(6) 评论(0) 推荐(0)
摘要: 一些小技巧/小trick 待补 莫队值域分块 Binary gcd(Stein算法) 正常的欧几里得算法求gcd,时间复杂度由于取模、操作浪费等常数原因,往往较慢 而Binary gcd则以二进制为基础降低了常数 原理 若 \(a,b\) 均为偶数,则 \(\gcd(a,b)=2\gcd(\frac 阅读全文
posted @ 2025-08-18 09:32 Hirasawayuiii 阅读(7) 评论(0) 推荐(0)
摘要: 树上启发式合并(dsu on tree) 简单介绍 在树上,对于一些离线无修改并且答案关乎子树的题目,我们可以使用树上启发式合并来优化 启发式合并是一种优雅的暴力,暴力在于他的统计答案是暴力的,而优雅就优雅在他有一个优秀且严格的复杂度 核心思路为:在重链剖分的基础上,对于每个节点,求解完所有轻儿子后 阅读全文
posted @ 2025-08-12 21:12 Hirasawayuiii 阅读(5) 评论(0) 推荐(0)
摘要: bitset介绍与应用 bitset是c++中的一个stl。简单来说,可以存储一个01串,并进行大部分修改、查询操作,拥有优秀的复杂度与常数。 基本操作 初始化 bitset <N> s; 即声明了一个长度为 \(N\) 的bitset,命名为s,其中全部为0 可以通过整型变量或字符串直接赋值 st 阅读全文
posted @ 2025-08-08 11:21 Hirasawayuiii 阅读(62) 评论(0) 推荐(0)
摘要: [线段树系列 #5] 可持久化线段树 简单介绍 可持久化线段树,为什么是可持久化的呢,因为他能调取线段树上的历史数据。 思路概述 可持久化线段树的简单思路就是,在动态开点线段树的基础上,每次修改时建一棵新树,并将没有修改的节点直接指向原有的节点,使得可以在较短的时间内完成操作。这里插一张网上的图,辅 阅读全文
posted @ 2025-07-17 10:15 Hirasawayuiii 阅读(9) 评论(0) 推荐(0)
摘要: [线段树系列 #2] 动态开点线段树 简单介绍 动态开点线段树最出名也是最广为人知的一点就是:省空间 你可以理解为 当有一个新的节点 \((x,v)\) 插入时 我们只建了从 1 到 \(x\)​ 的一条链 所以 原普通线段树 \(1-n\) 的大约 \(4n\) 个点,我们只需建 \(m\log 阅读全文
posted @ 2025-07-14 16:13 Hirasawayuiii 阅读(11) 评论(0) 推荐(0)
摘要: [线段树系列 #4] 线段树分裂 简单介绍 线段树分裂,可以简单理解为把所需的链单独取出来,即为合并的逆操作 线段树分裂只适用于有序的序列,无序的序列是没有意义的,常用在动态开点的权值线段树。 思路概述 一颗区间为 \([1,n]\) 的线段树中分裂出 \([l,r]\),并建一颗新树 从 1 号结 阅读全文
posted @ 2025-07-14 16:13 Hirasawayuiii 阅读(7) 评论(0) 推荐(0)
摘要: [线段树系列 #3] 线段树合并 简单介绍 线段树合并,通常是对于维护同样的一个区间的动态开点线段树来说的(普通线段树每个节点都是对应的,直接相加即可)。 它可以将多个线段树合并为一个线段树,以来记录答案 思路概述 假设两颗线段树为 A 和 B,我们从 1 号节点开始递归合并。 递归到某个节点时,如 阅读全文
posted @ 2025-07-14 16:12 Hirasawayuiii 阅读(15) 评论(0) 推荐(0)