随笔分类 - 数据结构
摘要:咋全是 \(O(N \sqrt{N})\) 的啊。 从询问入手,设三个区间公共拥有的数有 \(c\) 个,比较好发现答案为 \((r1 - l1 + 1) + (r2 - l2 + 1) + (r3 - l3 + 1) - 3c\),所以需要找到三个区间都有的数有多少个。 公共拥有这一个问题很像 b
阅读全文
摘要:依旧分块。 值域上老套路了,对于这种值域小,区间将一个值赋为另一个值又跟个数相关的,直接上序列分块 + 并查集维护,问题在于要查第 \(k\) 小值,第一,不能分成若干个段单独考虑,第二,值域上肯定不能只知道个某个值有多少个就行了。 对于第一个问题,我们可以将分块维护的东西改成前缀和,定义 \(su
阅读全文
摘要:这个好像叫突刺贯穿第二分块吧。 神奇的分块题,先考虑全局查询怎么做,首先发现当做了 \(1\) 操作后会有很多原本不同的值变得相同且以后也一直会相同,并且此题值域 \([0, 10^5 + 1]\) ,相当于把原本两个值「并」在了一起,由此联想到并查集维护,刚好还能维护某个值的数量。 思考怎么保证时
阅读全文
摘要:直接枚举 \(t\) 明显不行,由于 \(1 \leq P, Q \leq 10^6\),考虑先满足一个条件,枚举 \(a_i\),则 \(i = kP + a_i\),然后查询有多少个 \(k\) 存在一个 \(j \in [1, m]\) 满足 \(kP + a_i \equiv b_j (\t
阅读全文
摘要:题目大意 给定一颗 \(N\) 个节点以 \(1\) 为根的有根树,每次给以 \(u\) 为根的子树每点加 \(1\) 的值或给路径 \(u - v\) 上每点加 \(1\) 的值,每次修改后查询一个点 \(u\) 使得 \(\sum_{v = 1}^N dis(u, v)\) 最小。 题目转换 首
阅读全文
摘要:/* address:https://codeforces.com/problemset/problem/407/E AC 2025/2/4 20:18 */ #include<bits/stdc++.h> using namespace std; const int N = 1e6 + 5; in
阅读全文
摘要:题目概述 对一棵树维护两种操作:翻转某个点的颜色,求 \(max\{ dist_{u, v} \}\) 且满足 \(u\) 的颜色和 \(v\) 的颜色都是白色( \(u,v\) 可以相同)。 思路 首先考虑若没有修改,给定带颜色的 \(N\) 个点怎么查询。 经典办法是树形 \(\text{dp}
阅读全文
摘要:题意描述 有 \(N\) 座城市,第 \(i\) 座坐标为 \(a_i\) ,有 \(M\) 辆卡车,第 \(i\) 辆卡车要从城市 \(s_i\) 前往城市 \(e_i\) ,每单位长度耗油量为 \(c_i\) ,可以在中途城市加满油 \(r_i\) 次,求让所有卡车都能到达目的地最小的油箱容积。
阅读全文
摘要:Permutation Swaps 传送门 题目理解 第一个操作:把第i个数移到位置p[i](1<=i<=n) 发现:这个操作其实就是循环移位,有Teleporter的经验在前,此操作可用倍增\(\log_{2}^{n}\)实现,同时可 以推出此操作可以叠加,所以用一个sum记录操作次数,查询时一
阅读全文
摘要:update 2024/12/28 题目描述 给定一棵树,每次询问区间 \([l,r]\) 的 \[\max_{l \le l' \le r' \le r \land r' - l' + 1 \ge k}\text{dep}_ {\text{LCA*}(l', r')} \]引理证明 先来证两个区间
阅读全文
摘要:[BZOJ P2771] 天才ACM 传送门 朴素算法 枚举终点 \(r\),对区间 \([l, r]\) 排序求校验值 \(sum\),比较 \(sum\) 和 \(t\) $ sum \le t $ r++ $ sum > t $ l=++r,ans++ 时间复杂度N2log N 初步优化 考虑
阅读全文

浙公网安备 33010602011771号