上一页 1 2 3 4 5 6 ··· 16 下一页
摘要: 思路:若区间包含的\(a_i\)完整,最小众数为\(1\);若\(a_l\)只有后缀\([x,a_l]\)且\(a_r\)只有前缀\([1,y]\),当且仅当\(\forall i \in [l,r], a_i \ge x\)时最小众数是\(x\),否则为\(1\)。为方便求解,先求出所有最小众数为\(x(x>1)\)的子区间并贡献\(x - 1\),再让所有子区间统一贡献\(1\)。利用小根笛卡尔树,对于笛卡尔树上节点\(u\),在其左右子树分别取\(l\)、\(r\)计算贡献。左端点有\(siz_{ls} +1\)种取法,右端点有\((sum_{rs}+a_u) - (x - 1)(siz_{rs}+1)\)种取法,每个方案贡献\(x - 1\) ,经化简可得\(u\)子树总贡献为\((siz_{ls}+1) ((sum_{rs}+a_u)\frac{a_u(a_u - 1)}{2} - (siz_{rs}+1) \frac{(a_u - 1)a_u(2a_u - 1)}{6})\) ,该问题可线性求解,单\(\log\)做法能简化代码 。 阅读全文
posted @ 2025-10-09 20:50 wing_heart 阅读(17) 评论(0) 推荐(1)
摘要: 题意:\(n\)种食物(\(n\leq5000\))可组成\(2^n\)种串串,共\(2^{2^n}\)种选串串集合方案,求每种食物至少出现2次的方案数并对输入大质数取模。思路:利用容斥原理,设\(f_i\)表示至少\(i\)种食物至多出现1次,答案为\(\sum_{i = 0}^n (-1)^i f_i\)。最初得\(O(n^3)\)的\(\sum_{i = 0}^n (-1)^i \binom{n}{i} 2^{2^{n - i}} \sum_{j = 0}^i \binom{i}{j} \sum_{k = 0}^j {j \brace k} 2^{(n - i)k}\),经推导\(\sum_{j = k}^i {j \brace k} \binom{i}{j} = {i + 1 \brace k + 1}\),优化为\(O(n^2)\)的\(\sum_{i = 0}^n (-1)^i \binom{n}{i} 2^{2^{n - i}} \sum_{k = 0}^i 2^{(n - i)k} {i + 1 \brace k + 1}\),通过快速幂与递推第二类斯特林数求解 。 阅读全文
posted @ 2025-10-08 19:47 wing_heart 阅读(11) 评论(0) 推荐(0)
摘要: 题意:给定长为\(n\)序列\(\{a_i\}\)与正整数\(k\),\(n,m \leq 2×10^5\),\(1 \leq a_i \leq 10^6\),有\(m\)次操作,包括修改\(a_x = y\)和查询\([l,r]\)内长度为\(k\)且两两互质的子区间个数。思路: 1. **刻画不互质关系**:将\(a_i\)分解质因数,每个质因数用set维护有相同质因数且小于当前位置的最大位置,以确定\(p_i\)(\(a_i\)最近的使\(gcd(a_i, a_{p_i}) > 1\)且\(p_i < i\)的位置)。修改\(a_x\)时,更新相关set与\(p_{next(x)}\)及\(p_x\),时间复杂度\(O((n + m)\log^2)\)。 2. **区间查询实现**:因\(k\)固定,维护以\(x\)为左端点的\([x, x + k - 1]\)区间合法性。\(p_i > i - k\)时,标记\([i - k + 1, p_i]\)不合法。通过线段树维护区间最小值及最小值个数,将求无标记子区间个数转化为查询线段树,从而解决查询操作。 阅读全文
posted @ 2025-10-05 21:38 wing_heart 阅读(4) 评论(0) 推荐(1)
摘要: - **思路一**:先考虑 $m = 1$ 的情况,通过推导得出维护 $sum_{i \in [0,k]} = \sum_{j \in [l + 1,n]} s_{j}^i$ 的方法,时间复杂度为 $O(Nk^2)$。对于 $m \neq 1$ 的情况,枚举矩形的 $y1,y2,x1$,按照类似思路计算,时间复杂度为 $O(N\sqrt{N}k^2)$。 - **思路二**:同样先看 $m = 1$ 时,对答案表达式进行展开和变形,利用后缀和计算,得出时间复杂度为 $O(Nk)$。当 $m \neq 1$ 时,枚举矩形的 $y1,y2,x1$,对答案表达式展开,同样利用后缀和计算,时间复杂度为 $O(N \sqrt{N} k)$,相比思路一少一个 $k$ 的复杂度 。 阅读全文
posted @ 2025-10-05 17:28 wing_heart 阅读(6) 评论(0) 推荐(0)
摘要: 题意:给定有向图,$n,m,q \leq 5 \times 10^5$,有4种操作:摧毁边$(u,v)$、摧毁点$u$所有入边、修复边$(u,v)$、修复点$u$所有入边,每次操作后判断是否能发起总攻,条件为所有点出发可到环且每个点出度$\leq 1$。思路:能发起总攻时图为内向基环树森林,关键是维护每个点出度是否恰好为1。因操作2、4难以直接维护出度,利用入度和等于出度和等于$n$这一条件,为每个点随机权值$w_u$,用$f_u = \sum_{v \in {in_u}} w_v$表示点$u$所有入边权值和,通过维护$f_u$来判断。若$\sum f_u = \sum w_u$,则大概率每个点出度为1 ,时间复杂度线性。 阅读全文
posted @ 2025-10-02 18:37 wing_heart 阅读(14) 评论(0) 推荐(0)
摘要: 题意:给定有向图,$n,m,q \leq 5 \times 10^5$,有4种操作:摧毁边$(u,v)$、摧毁点$u$所有入边、修复边$(u,v)$、修复点$u$所有入边,每次操作后判断是否能发起总攻,条件为所有点出发可到环且每个点出度$\leq 1$。思路:能发起总攻时图为内向基环树森林,关键是维护每个点出度是否恰好为1。因操作2、4难以直接维护出度,利用入度和等于出度和等于$n$这一条件,为每个点随机权值$w_u$,用$f_u = \sum_{v \in {in_u}} w_v$表示点$u$所有入边权值和,通过维护$f_u$来判断。若$\sum f_u = \sum w_u$,则大概率每个点出度为1 ,时间复杂度线性。 阅读全文
posted @ 2025-09-29 10:58 wing_heart 阅读(26) 评论(0) 推荐(0)
摘要: 题意:飞机有 $n$ 排座位($1 \le m \le n \le 1000000$),$m$ 人登机,前后各有一个入口,每人有分配座位(可能相同),登机时若座位被占则朝进入方向找空位,若走到尽头未找到则愤怒,求无人生气的座位分配及登机方案数对 $10^9 + 7$ 取模结果。思路:将问题转化为概率问题,看成环形座位(环长 $n + 1$,在 $1,n$ 衔接处设座位 $0$),每个人随机分配座位和方向,因每个座位等价,一个座位被占据概率是 $\frac{m}{n + 1}$,则 $0$ 未被占用概率为 $\frac{n + 1 - m}{n + 1}$,而方案总数为 $(2(n + 1))^m$,所以合法方案数为 $(2(n + 1))^m \times \frac{n + 1 - m}{n + 1}$ 。 阅读全文
posted @ 2025-09-28 15:11 wing_heart 阅读(12) 评论(0) 推荐(0)
摘要: 可持久化平衡树。 阅读全文
posted @ 2025-09-28 10:41 wing_heart 阅读(7) 评论(0) 推荐(0)
摘要: 题意:给定 $n$ 个区间 $[L_i, R_i]$,每次询问 $l, r, x$,对于 $i \in [l, r]$,从左至右枚举 $i$,若 $x \in [L_i, R_i]$,则 $x \gets x + 1$。思路:离线时可采用《插入 - 标记 - 回收》算法,用平衡树实现单 $\log$ 复杂度。在线时,通过预处理区间 $[a, b]$,计算 $x \in [0, V]$ 走过该区间后增加值,利用线段树处理询问。线段树节点 $u$ 表示区间 $[a, b]$,由于值域 $V$ 大,将值域分成若干段,每段增加值相同,用 vector 存储这些段信息。建树时,通过归并两个儿子的 vector 合并区间,复杂度 $O(n \log n)$。查询时,对每个线段树节点二分查找 $x$ 在对应 vector 位置并更新 $x$,时间复杂度 $O(m \log^2 n)$,空间复杂度与时间复杂度相同 。 阅读全文
posted @ 2025-09-28 09:43 wing_heart 阅读(14) 评论(0) 推荐(0)
摘要: 题意:给定两棵树 $S$ 和 $T$,$n \leq 5 \times 10^3$,判断 $S$ 能否通过特定操作与 $T$ 同构,若能则构造方案。操作要求选择点 $u$ 和点 $v$ 满足 $2 \mid dis(u, v)$,以 $u, v$ 路径上任意一点为根交换子树 $u, v$,操作次数不能超过 $2n$。思路:先分析操作性质,按深度奇偶对树节点黑白染色,操作只能在同色点对间进行且操作后点度数不变,所以 $S$ 和 $T$ 同色同度数点数量相同是存在方案的必要条件,且该条件也是充要的。构造方案时,先将 $S$ 和 $T$ 中相同颜色相同度数的点配对。以 $1$ 为根对 $S$ 操作,对每个点,按 $T$ 从深度浅到深的顺序,若当前点有失散儿子和假儿子,且假儿子不是失散儿子的祖先,直接交换子树;若假儿子是失散儿子的祖先且失散儿子不是叶子,可通过交换失散儿子的一个儿子和当前点来调整,如同反向 $(v, u)$ 的链;若失散儿子是叶子,可先不管,因为非叶子节点找到正确父亲后叶子自然正确。时间复杂度 $O(n^2)$,操作次数 $< n$ 。 阅读全文
posted @ 2025-09-27 16:03 wing_heart 阅读(22) 评论(4) 推荐(1)
摘要: 题意:给定\(n\)个人(\(n \leq 10^6\))健身需求和\(m\)个器材(\(m \leq 10^9\)),每人在\([l_i, r_i]\)某天使用器材\(p_i\),求使健身房有人天数最少的安排。思路: - **贪心+线段树**:先离散化器材。按\(l\)降序更新\(r_i\),用动态开点线段树找器材最后未占用时刻,判断是否有解。再按\(r\)升序,通过线段树二分找健身房有人且器材\(p\)有空的最早时刻。虽时间\(O(n \log V)\),但空间\(O(n \log V)\)需卡空间。 - **优化贪心**:先更新\(r_i\),从小到大枚举时间\(t\)。每个器材维护set,\(l_i = t\)时将\(i\)加入\(p_i\)的set;\(r_i = t\)时,\(i\)在\(r_i\)健身,从其他非空器材set选\(r\)最小者当天健身。时间\(O(n \log n)\),空间\(O(n)\),更优且无需卡常。 阅读全文
posted @ 2025-09-25 21:36 wing_heart 阅读(25) 评论(0) 推荐(0)
摘要: 题意:给定长度 $n \leq 5 \times 10^5$ 的 popcount 序列 $\{a_i\}$,求其对应的原序列。思路:观察发现 popcount 序列具有倍增构造性质,将原序列 $[0,2^k - 1]$ 的第 $k$ 位改成 $1$ 可得到 $[2^k,2^{k + 1} - 1]$,表现为相同颜色框右边比左边加 $1$ 。由于难以从大框框确定分组,故从小框框开始。通过比较相邻元素,若左边加 $1$ 等于右边则分为一组,每个框框仅记首位数字用于比较。不断分组,直至整个序列分组完成。时间复杂度 $O(n)$,计算为 $n + \frac{n}{2} + \frac{n}{4} + \cdots + 2 + 2 + 2 + \cdots + 2 = O(n)$,过程中记得判断无解情况。 阅读全文
posted @ 2025-09-23 15:43 wing_heart 阅读(38) 评论(1) 推荐(1)
摘要: 题意:对递归$n$层($n \le 10^7$)的闪现树,求深度$k \in [l,r]$($l,r \le 10^7$)的点数。思路:一是递推法,设$f_i$为深度$i$根点数,依规则递推并修正多算部分,结合非根点数$g_i = 2f_{i - 1}$与叶子节点得解;二是生成函数法,设$F(x)$为根生成函数,依递归关系推导,利用等比数列公式及二项式展开求系数,结合非根与叶子节点生成函数,线性时间内求出深度在$[l,r]$的点数 。 阅读全文
posted @ 2025-09-17 10:37 wing_heart 阅读(4) 评论(0) 推荐(0)
摘要: 题意:给定一棵有 \(n\) 个点(\(n \le 1000\))的树,每条边 \((u, v)\) 有参数 \(c\) 表明 \(u\) 和 \(v\) 谁必须排在前面,求满足所有边条件的排列种数。思路:采用容斥原理解决。先以 \(1\) 为根,将所有 \(c = 1\) 的边看作无限制,求方案数,再通过容斥调整。可在树形DP中带上容斥系数,朴素DP设 \(f_{u,p,s}\) 复杂度超了,将 \(s\) 改为 \(0/1\) 表示其奇偶性。也可利用外向树拓扑序计数公式 \(\frac{n!}{\prod_{i = 1}^n siz_i!}\) 来解决,设 \(f_{u,s}\) 表示满足 \(u\) 的连通块大小为 \(s\) 且在转移时带上容斥系数,整棵子树的方案数,时间复杂度为树形背包的 \(O(n^2)\)。 阅读全文
posted @ 2025-09-16 16:29 wing_heart 阅读(12) 评论(0) 推荐(0)
摘要: 题意:给定 $n$ 个数($n \le 200$,$a_i \le 5 \times 10^4$),求所有满足至少有 $k$ 个子集 $S$ 使得 $\sum_{i \in S} a_i = w$ 的 $w$ 的异或和,$k \le 7$,时限 $0.5s$。思路:朴素背包 DP 复杂度为 $O(n \sum a_i)$,考虑到 $k$ 较小且 $\sum a_i = 10^7$,利用 bitset 优化。原本背包中 $f_i$ 表示和为 $i$ 的方案数,加一个数 $a$ 时 $f'_{i+a} \gets f_{i}$,这里使用 bitset 做位移和按位或操作。对于 $k>1$ 的情况,定义 $f_{k,i}$ 表示考虑到当前数字时,和为 $i$ 的方案数是否达到 $k$,通过 $f_k \gets f_k \mid (f_{k - 1} \ll a)$ 递推,时间复杂度为 $O(k \frac{n \sum a_i}{w})$,能满足时限要求。 阅读全文
posted @ 2025-09-16 09:10 wing_heart 阅读(22) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 ··· 16 下一页