- 博客(108)
- 收藏
- 关注
原创 【一维 前缀和+差分】
给定一个数组a[1..n],其前缀和数组pre[1..n]preia1a2⋯aipreia1a2⋯ai即pre[i]表示原数组从第 1 项到第 i 项的和。对于原数组a[1..n],其差分数组diff[1..n]diffiai−ai−1i≥2diff1a1diffiai−ai−1i≥2diff1a1通过差分数组可以快速实现对一个区间lr[l, r]lr。
2025-07-14 22:58:14
659
原创 【二分答案】-----【扑克牌】
本题是典型的最大化最小值问题,适合使用二分答案 + 贪心判定;关键在于判定函数中计算 Joker 补充量并限制每套牌最多使用一张 Joker;合理选取二分右界,避免搜索区间过大导致超时;
2025-07-10 15:25:49
950
原创 【二分】-----【四值零和】
本题是一个经典的高维枚举降维问题,等价于 4Sum II;暴力四重循环不可行,应采用分组 + 排序 + 二分查找优化;技巧核心在于:枚举aba+bab,查找−cd-(c+d)−cd,或反过来均可;本题使用 STL 提供的与,简洁高效。方法是否排序是否二分是否哈希复杂度优劣说明排序 + 二分是是否On2lognOn2logn稳定,适用于不支持哈希环境哈希查表法否否是On2O(n^2)On2更快,适用于小数据量环境。
2025-07-10 11:13:16
995
原创 【二分答案】-----算法基本原理
要点内容本质将“最优化问题”转化为“单调判定问题”并进行二分判定函数check(mid)判断在 mid 情况下是否满足要求模板最大化最小值 & 最小化最大值两类对称模板难点check的构造与单调性证明实用性高,在工程、竞赛、科研中广泛应用只要掌握了“check 函数 + 单调性 + 模板结构”三大核心,遇到任何“最小化最大值”或“最大化最小值”的优化问题,都可以第一时间联想到使用二分答案法,从而优雅、高效地求解复杂问题。
2025-07-09 16:53:01
928
原创 【二分答案】-----【整点巧克力】
本题是典型的“最大化最小值”模型,适合使用二分答案 + 贪心模拟验证的方式解决;具备“可行性关于答案呈单调性”的性质,因此二分答案成立;难点在于check(mid)每天开始前快乐值会减半;每天可以吃若干块巧克力,必须按顺序吃;要确保每天结束时的快乐值 ≥ 目标值;贪心策略:当当前快乐值 < mid 时就吃巧克力直到满足为止;本题很好地锻炼了“动态过程中的数值维护 + 贪心判断 + 二分答案”综合能力;
2025-07-09 16:04:43
940
原创 【二分答案】-----【P1843 奶牛晒衣服】
本题是一个典型的二分答案问题;注意关键限制是“每秒只能烘一件衣服”,因此烘干总时长不能超过TTT;check 函数设计是核心,必须正确模拟每件衣服的处理逻辑;适合练习最小可行解的二分写法。
2025-07-08 11:47:53
638
原创 【二分答案】-----【Aggressive Cows】
本题是经典“最大化最小值 + 单调判定”模板。易错点坐标差超int,要用 64 位;不要把下界设 0(否则mid = 0时 check 永远成功 → 死循环);输入多组数据时记得重置数组/变量。思考扩展:若要求“最大化两两距离之和”或“最小化最大距离”,二分+贪心就失效,需要 DP / 其他优化策略,可在练习后自行探究。
2025-07-04 15:06:39
865
原创 【二分】-----【Music Notes S】
使用前缀和构造每个音符的结束时间将每个查询转化为在有序数组中找第一个大于某值的位置使用手写二分提高查询效率。
2025-07-03 16:25:12
918
原创 【二分】-----【整数域二分】
简洁高效地实现了整数域二分查找,减少了手动实现二分带来的复杂度,且代码结构清晰,易读性强。边界条件判断确保了查询结果的准确性,是解决静态区间计数问题的常用模板。这道题本质上是静态数组多次区间查询“满足条件的元素个数”的问题。次区间查询操作,每次询问在闭区间。,这样元素有序,方便后续二分查找。次查询操作,每次查询一个区间。,适合作为整数域二分的练习题。中,有多少个数组元素满足。:方便后续使用二分查找。本题解利用 STL 的。
2025-07-03 10:32:03
774
原创 【时间戳】
操作时间戳技巧优化点判重数组不需要清空vis[]判重 map用记录时间戳多组数据只需++timer替代memset或clear()空间大数据时间戳替代清空,性能提升明显大规模判重频繁使用多个数据组替代耗时的数组清空操作。
2025-06-27 21:05:16
603
原创 【队列】----【Keep In Line】
本题核心思想是用时间戳记录顺序,再借助set维护在队人中谁是最早入队的;插队与否只在出队时判定,通过时间戳与当前队首的比较;是一道典型的模拟 + 贪心判断 + 哈希 + 有序集合混合使用的好题,体现了实际调度逻辑模拟能力。
2025-06-27 20:55:09
925
原创 【栈】-----【小C的记事本】
特点说明操作顺序栈用栈实现回滚操作字符串模拟使用+=resize()实现插入与删除高效读写需开启加速考查能力栈的应用、模拟题技巧、string 操作能力。
2025-06-23 20:17:02
1152
原创 【队列】-----【简单的数据结构】
本题通过 STL 双端队列实现,结合直接调用reverse和sort,简单模拟操作流程,代码简洁,逻辑清晰,满足题目要求。注意输出格式,避免行末多余空格。若性能有压力,可考虑维护反转状态标志优化翻转操作。
2025-06-22 15:20:37
1046
原创 【单调栈】-----【小A的柱状图】
本题是「最大矩形面积」问题的变种,处理了宽度不等的情况。单调栈快速寻找左右边界,避免暴力;用前缀和代替下标差求区间宽度;每根柱子作为“最矮的”核心,计算能扩展的最大矩形。
2025-06-22 14:55:34
669
原创 【单调栈】-----【Largest Rectangle in a Histogram】
本题是单调栈最典型的应用之一,掌握这个模板对很多区间最大/最小滑动窗口问题都有极大帮助。用栈保存候选边界元素,用单调性剔除不可能的选择,从而压缩搜索空间。注意左边界用0、右边界用n+1的越界设定,是公式统一性的重要保障。
2025-06-21 22:28:06
1201
原创 【单调栈】-----【Bad Hair Day S】
我们从右往左遍历奶牛序列。使用一个单调递减栈栈中存的是下标;栈内元素对应身高从栈顶到栈底单调递减;每次遍历位置iii1.把所有高度 <hih_ihi的栈顶元素弹出;2.剩下的栈顶元素即为第一个右边比它高的牛;记录该位置为ender[i],表示第iii头牛视线终止的位置;若栈空,则说明iii后面所有牛都能看到,记为n+1(越界标记)3.当前下标iii入栈,供更左边的牛判断用。本题本质是典型的““找右边第一个大于等于当前值的位置””的题型;
2025-06-21 21:53:20
796
原创 【单调栈】-----【Look Up S】
本题的关键在于右边第一个比它大的元素类型维护方向栈内单调性典型问题找右边第一个更大元素右→左单调递减本题 Look Up、柱状图最大矩形找右边第一个更小元素右→左单调递增维护下一个最小值找左边第一个更大元素左→右单调递减左边比它大的最近值找左边第一个更小元素左→右单调递增下一个更小值。
2025-06-20 16:56:03
561
原创 【单调栈】-----【原理+模版】
单调栈的本质问题目标遍历方向栈中保持比较方向栈顶含义(结果)① 找右边第一个更大元素从右向左值递减栈(大压小)往右找大栈顶是右侧第一个更大元素的下标② 找左边第一个更大元素从左向右值递减栈(大压小)往左找大栈顶是左侧第一个更大元素的下标③ 找右边第一个更小元素从右向左值递增栈(小压大)往右找小栈顶是右侧第一个更小元素的下标④ 找左边第一个更小元素从左向右值递增栈(小压大)往左找小栈顶是左侧第一个更小元素的下标。
2025-06-19 19:25:51
1170
原创 【队列/优先队列】------【合并果子】
本题利用贪心思想,每次优先合并最小的两堆,实现最小总体合并代价。通过小顶堆结构快速实现贪心选择。该思路不仅适用于本题,还可以应用于类似的“最小代价合并”问题(如哈夫曼编码构造)。
2025-06-18 23:15:45
703
原创 【单调队列】------【滑动窗口】
单调队列是一种能维护队列中元素单调性的队列结构。单调递减队列:用于维护最大值(队首永远是当前窗口中的最大值);单调递增队列:用于维护最小值(队首永远是当前窗口中的最小值)。我们将下标而不是元素本身放入队列,这样便于控制滑动窗口是否越界。单调队列是滑动窗口最大/最小值问题的利器;维护队列单调性的关键是:在入队前将不可能成为答案的元素弹出;注意控制窗口大小,及时将超出窗口的下标移出队首。
2025-06-18 23:02:55
838
原创 【栈】------【吐泡泡】
本题是一个典型的相邻字符合并爆炸模拟类问题栈结构非常适合处理这种“相邻+嵌套规则”的序列变化问题。同时注意在写括号匹配及其变种问题时,分支以栈空和栈非空来写逻辑上会更清晰一点。
2025-06-18 17:14:06
781
原创 【day01】-----HTML网页布局基础
HTML(HyperText Markup Language)称为超文本标记语言。超文本:支持超链接跳转标记语言:由一对尖括号包围的“标签”构成以下是在你的 HTML 文件中添加的详细注释版本,帮助你理解每一部分的作用:```html <!-- 声明文档类型为 HTML5 --> < html lang = " en " > <!-- 设置页面语言为英语 --> < head > < meta charset = " UTF-8 " > <!
2025-06-17 18:03:49
708
原创 【栈】------【牛牛与后缀表达式】
后缀表达式运算符写在操作数之后。例如中缀表达式3 + 4 * 5,后缀写法为3 4 5 * +。计算时从左往右扫描,用栈来保存中间结果。public:// 辅助函数:执行基本的运算操作(加、减、乘)// 注意参数顺序:a 是先弹出的,b 是后弹出的,所以减法时是 b - a// 加法// 减法(注意是 b - a)// 乘法return 0;// 保险返回,实际不会执行到// 主函数:解析并计算后缀表达式// 定义一个栈,用来存储操作数// 暂存一个完整数字(可能是多位数)
2025-06-17 13:09:46
647
原创 【栈】------【好串】
技巧点说明栈的匹配机制类似括号匹配、字符对消除(如“ab”型)问题可逆思路把“构造”的过程逆向成“消除”过程,更易建模限制模式构造本题核心是判断能否由一类模式反复插入构造出目标串高效匹配使用栈避免重复扫描、双指针等复杂控制结构。
2025-06-17 12:38:50
947
原创 【栈】------【栈和排序】
本题本质是贪心地在合法前提下优先输出大数。利用后缀最大值数组来辅助判断“当前栈顶是否应立即弹出”。结合栈模拟和出栈规则,实现最终的字典序最大出栈序列。
2025-06-17 00:59:32
1146
原创 【模板】埃拉托色尼筛法(埃氏筛)
在数论与编程竞赛中,求解1n[1,n]1n范围内的所有质数是常见的基础问题。埃拉托色尼筛法(Sieve of Eratosthenes)是一种古老而高效的算法,可以在OnloglognOnloglogn的时间复杂度内完成这一任务。埃拉托色尼筛法是数论的入门利器,是多种算法的基础工具。建议熟练掌握并牢记模板结构。同时要理解从i * i开始标记的数学依据,避免盲记公式。
2025-06-14 22:30:55
1122
原创 【二分答案】-----【切木棒】
识别模型:最小化最大值→ 可用二分答案;判定函数必须严格定义为“能否满足目标”;计算整除与不整除时的切割次数要分情况考虑;二分边界设置要小心,本题可以取[1, maxL];
2025-06-12 23:10:29
1032
原创 【二分模版------左闭右闭】
二分查找本质是通过“不断折半缩小搜索区间”,在对数时间内定位目标值或确定其是否存在。左闭右闭区间。易于理解(区间包含两端点)不会漏查(即使只剩一个元素)更稳定通用,适配各种边界要求错误写法错误点容易漏掉最后一个元素可能导致整数溢出left = mid若没正确处理,可能死循环忘记返回 -1当目标值不存在时未处理项目建议模板使用频率极高(如搜索区间、贪心验证、答案二分)模板适配性左闭右闭更推荐,适配所有边界场景调试建议加入打印查看变化过程。
2025-06-12 20:15:40
418
原创 【并查集】------【DongDong认亲戚】
然而 DongDong 记性并不好,没法直接判断两个人是否是亲戚(定义:若 A 和 B 是亲戚,B 和 C 是亲戚,那么 A 和 C 也是亲戚)。并查集是一种数据结构,支持两种基本操作:查找(Find)和合并(Union)。要求使用高效的数据结构来维护这些关系,并快速回答“是否是亲戚”的问题。我们合并 chen 和 lin(让 chen 指向 lin)现在 chen、lin、yi 全属于 lin 所代表的集合。你需要根据给定的操作,处理亲戚关系,并回答相应的查询。,如本题中的亲戚关系判断。
2025-06-12 19:04:48
803
原创 【区间dp】-----例题5【田忌赛马】(暂时只会贪心解法)
然而,赛马问题是一种特殊的二分图最佳匹配的问题,上面的算法过于先进了,简直是杀鸡用牛刀。由于齐王总是先出最好的马,再出次好的,所以田忌用常规马对齐王的超级马,用自己的超级马对齐王的上级马,用自己的上级马对齐王的常规马,以两胜一负的战绩赢得。如果不止三匹马怎么办?把田忌的马放左边,把齐王的马放右边。他和齐王都有三匹马:常规马,上级马,超级马。因为如果不打这一场,而是用这匹好马去对齐王的一匹慢马,虽然也能赢,但会浪费这匹快马的优势,可能影响后续更关键的比赛。齐王的马好,同等级的马,齐王的总是比田忌的要好一点。
2025-05-29 22:05:31
724
原创 【区间dp】-----例题4【凸多边形的划分】
设dp[i][j]表示从第i个顶点到第j个顶点所构成的子多边形(包含这两个顶点),划分成若干三角形后,其所有三角形顶点乘积和的最小值。注意:这里的i到j是连续编号的顶点,且顺序不变。项目内容算法类型区间动态规划(Interval DP)时间复杂度O(n³)空间复杂度O(n²)核心技巧区间划分 + 最小化三角形乘积和注意事项使用__int128防止溢出类似题目矩阵链乘法、石子合并、最长回文子串。
2025-05-26 23:16:16
291
原创 【使用 __int128 处理超大整数计算】
lll x = 1;操作支持情况定义变量✅ 支持四则运算✅ 支持比较操作✅ 支持cin/cout支持❌ 不支持,需要自写GCC/Clang 支持✅ 支持MSVC 支持❌ 不支持。
2025-05-26 22:41:44
829
原创 【区间dp】-----例题3【石子合并】[带环]
/ 1.状态定义:// dpmax[i][j]:表示将区间 [i..j] 的石子合并为一堆所能获得的最大代价// dpmin[i][j]:表示将区间 [i..j] 的石子合并为一堆所能获得的最小代价。
2025-05-19 22:11:32
158
原创 【区间dp】-----例题2【最长回文子串】
子串(Substring)要求字符连续且顺序不变;例如"aba""bb"都是回文子串。回文(Palindrome)正着读和反着读完全相同;例如"aba""racecar"。给定一个字符串s,找出其中最长的回文子串,并返回其长度。我们使用一个大小为n×n的布尔矩阵dp,其中。// dp[i][j] 含义:子串 s[i..j] 是否为回文// 取值:// dp[i][j] = true, 当且仅当 0 ≤ i ≤ j < n 且 s[i..j] 整体是回文。
2025-05-19 20:13:26
377
原创 【区间dp】-----例题1【最长回文子序列】
子序列(Subsequence)从字符串中删除任意个(也可以不删)字符后得到的新字符串;不要求连续,但要求相对顺序不变。回文(Palindrome)正着读 = 反着读;比如:“aabaa”, “abcba”找出字符串中最长的“回文子序列”的长度。dp[i][j]:表示从下标i到j的子串s[i..j]中,最长的回文子序列长度。dp[0][4] 就是求 s[0…4] = “bbbab” 里的最长回文子序列长度枚举区间长度时从小到大,因为小区间是大区间的子结构,必须先算好。
2025-05-18 22:32:50
828
原创 【背包dp】小结
多个物品选几个,容量限制是核心;选或不选看约束,价值最大找最优;可重复用正序扫,只能选一次就倒流;多重拆成 0-1 背,分组记得内部分组选。
2025-05-18 14:46:46
809
原创 【背包dp-----分组背包】------通天之分组背包【模板】
dp[i][j]表示从前i个物品组中,在总容量恰好为 j 的情况下所能获得的最大价值。外层循环:遍历物品组对于每一个物品组(从第1组开始),获取该组的所有物品。继承上一组的状态在处理当前组之前,先继承前一组的状态(即假设不选择当前组中的任何物品),确保基础状态正确。中层循环:遍历当前组内的每个物品对于当前组中的每一个物品,计算其对背包的影响。最内层循环:遍历背包容量对于当前物品,遍历所有可能的背包容量,并根据当前物品的重量和价值更新dp数组。
2025-05-17 21:54:01
1084
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人