- 博客(171)
- 收藏
- 关注
原创 Treap3: 维护区间
作者已经写下了旋转Treap和无旋Treap的两篇文章, 有兴趣可以看一下.旋转Treap传送门无旋Treap传送门下面将介绍无旋Treap的最通用的一个用法: 进行序列的操作.作者给出的代码都是纯 C, 当然, C++ 也可以编译.
2026-01-28 14:46:35
242
原创 Treap2: 无旋 Treap 的基本操作
上次讲解的旋转 Treap 虽然有着不少的优点, 但是缺点也是很明显的无法可持久化. (这个可持久化很有用, 以后再讲解)好像不够帅, 无法展示我们高超的编程水平分裂/合并 Treap 可以实现数列的操作 (这个下期讲解)下面给出分裂合并 Treap 的时间复杂度: (设树高为hhh插入, 删除, 查询排名, 查询排名对应的值, 查找前驱/后继均为OhO(h)Oh的复杂度分裂的复杂度为OhO(h)Oh设两棵树的高度分别为h1h2h_1,h_2h1h2。
2026-01-17 19:57:46
615
原创 【数据结构】 Treap1: 插入,删除,查找,旋转
Treap 叫做树堆.将 Tree 和 Heap 合成就是 Treap.元素的值valuevalue元素作为堆的时候的优先级prioritypriority所以 Treap 是包含二叉搜索树和堆两种性质的树.下面给出 Treap 的节点定义程序.// 两个儿子节点// 子树大小, 相同个数, 值, 优先级与堆不同, 二叉搜索树的堆的优先级是随机给出的.因为 C 库的rand实在太慢, 下面给出一个rand// 表示静态变量, 函数运行后值会保留下来, 不是原来的值// 一通乱搞。
2025-12-26 18:27:40
872
原创 【算法】 二分图理论知识和判断方法
本文详细介绍了二分图的概念和判定方法。首先定义了二分图需满足节点分为两个集合且每条边连接不同集合节点的条件,并通过图示展示了合法和非法的二分图示例。重点讲解了二分图染色的判定算法,包括邻接矩阵和邻接表两种实现方式的复杂度分析,以及通过DFS进行染色的算法原理和实现代码。最后提供了C++代码示例来判断一个图是否为二分图,并邀请读者在评论区讨论问题。文章结构清晰,理论结合实践,适合算法学习者理解二分图的基本概念和应用。
2025-12-24 21:22:59
920
原创 Atcoder abc441A~F 题解
瓶烧酒刚好就是最少的瓶子里面的, 我们要选的最少, 自然是每次选择最大的一瓶烧酒, 按照题意排序模拟即可, 时间复杂度。个询问, 让你判断输入的字符串是哪种语言, 两种都可能是或两种都不是输出。发现统计这个可以使用树状数组, 边操作边统计答案, 时间复杂度为。我们发现我们可以考虑不买这个东西, 看看是不是对于所有的。有两种语言, 每个语言都有一组特定的小写字母, 有。, 现在我们知道, 这个图的每个点的出边最多为。, 我们现在要找这样的节点:(设这个节点为。那么在这里, 不考虑这个东西的价值就是。
2026-01-19 22:03:20
622
原创 Graph and Queries UVA - 1479
我真的太开心了!我 AC 了这道这道题困扰了我好久, 我学了 Treap 之后做的第一道题就是这个, 今天!我花费了1.5个小时 AC 了这道题!不看蓝书的代码, 不 ctj!这给了我一个启示: 努力后的汗水像甘霖一样滋润!好了, 废话不多说, 开始解决这道题.
2026-01-02 21:51:08
982
原创 F - Manhattan Christmas Tree 2
所以现在转换成了最大最小值查询问题, 可以使用线段树维护。这个东西在线段树上面是不好维护的,我们考虑拆贡献.给你一堆圣诞树,每个圣诞树在一个点。最短的圣诞树的坐标为。强行拆掉绝对值符号,那么。所以直接是线段树模板题.然后单次查询出来就是答案。
2025-12-22 21:22:37
884
原创 题解: 【USACO题库】5.5.1 Picture矩形周长
摘要 本文介绍了使用扫描线算法解决矩形周长问题的思路。该算法通过离散化处理坐标,利用线段树维护区间覆盖次数,以O(N log N)的时间复杂度计算矩形面积或周长并。文章详细解释了扫描线的工作原理,包括入边和出边的概念,以及如何通过线段树动态维护覆盖区间。同时提供了代码实现框架,展示了如何通过排序、离散化和线段树操作来计算矩形面积并。该算法适用于处理大量矩形重叠情况,是解决此类几何问题的有效方法。
2025-12-03 21:26:18
293
原创 【USACO题库】3.3.2 Shopping Offers商店购物
在商店中,每一种商品都有一个价格(用整数表示)。例如,一朵花的价格是,而一个花瓶的价格是5z。为了吸引更多的顾客,商店举行了促销活动。促销活动把一个或多个商品组合起来降价销售,例如:三朵花的价格是5z而不是6z两个花瓶和一朵花的价格是10z而不是12z。编写一个程序,计算顾客购买一定商品的花费,尽量利用优惠使花费最少。尽管有时候添加其他商品可以获得更少的花费,但是你不能这么做。
2025-11-28 19:14:02
247
原创 1300. 【USACO题库】4.1.4 Cryptcowgraphy解密牛语
这道题目我交了足足 292929 次, AC 率变成 dog 了农民Brown和John的牛们计划协同逃出它们各自的农场。它们设计了一种加密方法用来保护它们的通讯不被他人知道。如果一头牛有信息要加密,比如"International Olympiad in Informatics",它会随机地把C,O,W三个字母插到到信息中(其中C在O前面,O在W前面),然后它把C与O之间的文字和 O与W之间的文字的位置换过来。这里是两个例子: -> -> 为了使解密更复杂,牛们会在一条消息里多次采用这个加密方法(把上次
2025-11-27 15:10:22
321
原创 1282. 【USACO题库】3.2.1 Factorials阶乘
我们肯定不想使用高精度实现,因为代码太多了,这里讲解一个简单的方法。(换而言之,就是哪两个数字相乘等于。中间的每一个数字,求出这个数字的。我们发现,哪两个数字相乘会产生。个因为一个偶数至少也有一个。的最后一个非零的数字。
2025-11-18 14:44:57
274
原创 8818. 【2025.11.15NOIP模拟】T3 树上铲雪
首先我们考虑最坏的情况,每一个点都单独开一次铲雪车,那么现在的答案为:∑ai这本质上就是一个删点的过程,那么我们可以合并一些点,使得答案变成∑ai−k其中k是合并之后减少的值。
2025-11-17 20:27:20
812
原创 2202. 修剪草坪 你真的懂了吗?
单调队列的队首元素就是最大/最小值单调队列里面存储的是元素的下标而不是元素的值!单调队列用于解决什么问题呢?其中的一个方面就是动态规划。dpiminjxyfjzqdpijxminyfjzq或者dpimaxjxyfjzqdpijxmaxyfjzq显然,在这种转移方程下面,时间复杂度为On×y−xOn×y−x))的,在某些数据很大的毒瘤题里面是过不了的。
2025-10-25 16:04:27
813
原创 2195. 受困的奶牛
FJ 刚刚收到了一批N1≤N≤4000堆的甘草。他把它们放在一条通向谷仓的路上的多个地方。不幸的是,他完全忘记了Bessie在沿着这条路上啃食牧草,她有可能现在被困在了这些甘草堆里了!每堆牧草j有一个大小Sj以及一个独特的在一维道路上的位置Pj。Bessie 从某一个没有甘草的位置开始,并可以在路上自由行走,甚至可以到达有甘草堆的位置,不过她不能越过这个位置。
2025-10-25 14:24:52
530
原创 解决 A + B
(一个很大但不是特别大的数),两件物品的价值分别为。这一道题有上百种方法AC,今天来教大家几种。最短路问题可以用 floyd 求出。用快速幂的原理,使用快速加。所以可以使用循环求出。所以我们得到递推式子。
2025-10-23 18:31:24
400
原创 2640. QYQ在艾泽拉斯
写在前面: 这道题目太恶心了!!!使用教程首先在代码前面新加上一行: 表示加入 这个命名空间(可能你不懂,但是只要会用就可以)或者在调用函数的时候(这里比如调用 ) 这样写 比如下面的代码 函数的使用是和 里面的 是一样的什么都可以排序,可以传入一个比较函数,仿函数,重载小于运算符Tips: 这个版本是不可以使用小于运算符、重载运算符的,要可以的版本叫爸爸里面有 和 这两个用法也是一样的重点 vector 的使用低级用法和 里面的 是一致的, 循环的简化()
2025-10-21 18:48:34
734
原创 清空全网题目系列 · 洛谷 · P1054 [NOIP 2005 提高组] 等价表达式
本系列由推出,目的是将全网的题目都解一遍这是第4篇上一篇:下一篇: 未完待续。
2025-10-07 20:32:41
800
原创 清空全网题目系列 · SPOJ · Sum the Square
本系列由 Lee_King_Jimmy 推出,目的是将全网的题目都解一遍这是第 333 篇上一篇: 清空全网题目 · 洛谷 · P1541 [NOIP 2010 提高组] 乌龟棋下一篇: linklink1link2在拿到这道题目的时候,我们可以试试打一个暴力的解法。计算出每一个数字要变成循环的最多的步数,我惊奇的发现,这个步数不超过 191919 !为什么?考虑最大的数据 999999999999999999999999999 (9个9)在经过一次计算之后变成了 729729729 变化这么大吗
2025-10-07 14:22:47
1019
原创 清空全网题目 · 洛谷 · P1541 [NOIP 2010 提高组] 乌龟棋
我们设dpc1c2c3c4dpc1c2c3c4其中cic_ici表示第iii种牌拿cic_ici个比如表示四种牌分别拿1,2,3,4个的最大分数首先我们初始化dp[0][0][0][0]=第一个位置的分数因为第一个位置的分数是自动获得的。
2025-10-07 14:07:02
1194
原创 传奇题解 · 2454. 【NOIP2010tj】引水入城
在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个 N 行 M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输水站。蓄水厂的功能是利用水泵将湖泊中的水抽取到所在城市的蓄水池中。因此,只有与湖泊毗邻的第 1 行的城市可以建造蓄水厂。而输水站的功能则是通过输水管线利用高度落差,将湖水从高处向低处输送。
2025-10-05 21:44:43
1068
原创 1552. 国王游戏{简单}
恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。
2025-10-05 21:27:45
526
原创 【UVA - 11636】Hello World!
通过 通过复制单个打印语句并粘贴,我们得到一个打印两行 "Hello World!然后复制这两条打印语句并粘贴,我们得到一个打印出四行 "Hello World!然后复制这四个语句中的三个并粘贴,我们可以得到一个 程序,可以打印出7行 “Hello World!鉴于你需要打印的 "Hello 世界!"的行数,你必须找出所需的最少粘贴次数。图1所示的源程序,找出制作该程序所需的最少粘贴次数。"这句话时,你感到非常高兴,不知道编程和算法的世界会变得多么复杂和有趣。请注意,我们并不关心 所需的复制命令的数量。
2025-09-30 21:32:18
727
原创 【CSP-S】 基础知识与编程环境
按空格键翻下一页,按 q 键退出。可能就是编译运行程序的指令。标准,考选择题时要注意!这个在历年的真题中考的。而且,noi 只支持。
2025-09-17 20:43:52
184
原创 【CSP-S】时间复杂度
对于一个嵌套的for循环,我们计算每层循环可能执行的最多次数即可,如果这个代码有多个for循环,计算时间复杂度最大的for循环即可。时间复杂度是衡量算法的运行速度的指标,是编程中最重要的技巧之一。而上面的代码将每个状态全部都计算了一次,所以时间复杂度为。但是我们在计算时间复杂度的时候要忽略所有的数字。这个是典型的斐波那契数列的递归解法,时间复杂度为。这个 for 循环的时间复杂度是。所以代码的实际的复杂度为。上面的代码时间复杂度为。这个代码的时间复杂度是。这个代码的时间复杂度是。
2025-09-15 21:03:29
816
原创 【Csp - S】 图的知识
顾名思义,有向图就是带有方向的图。我们设有一条从xxx连到yyy的边,我们可以从边xxx走到yyy但是不可以从yyy走到xxx换句话说,有向图的边就是单行道。
2025-09-14 19:42:11
690
原创 A - 2x2 Erasing
本文提出了一种解决矩阵操作问题的优化方法。题目要求在给定矩阵中处理多个查询,每个查询需要计算特定区域内2x2全白子矩阵的数量。通过分析发现,直接暴力处理每个查询的时间复杂度为O(n^2q)不可行。作者发现可以通过预处理二维前缀和数组来优化,将时间复杂度降至O(n^2+q)。具体实现时,先预处理每个位置是否能构成2x2全白子矩阵,然后使用二维前缀和快速计算任意矩形区域内的有效子矩阵数量。这种方法在保证正确性的同时显著提高了效率,适用于大规模数据。
2025-09-07 19:27:09
639
原创 【CSP-S】数据结构 ST 表详解
我们设dpstartsizedpstartsize表示从startstartstart开始,区间长度为2size2^{size}2size的答案。
2025-09-06 11:58:53
1070
原创 2721. 【SDOI2010】外星千足虫
所以我们就成功的将同余方程组改成了异或方程组,最后我们可以使用高斯消元法就可以求解了。因为有时候因为各种原因无法调用标准库时,我们可以手写。次使用 “点足机” 时测量的足的的虫子编号为。表示 C++ 中的异或,也就是 ‘^’)里面,就像高精度乘法一样,比起普通的。这是不影响后面的答案的,因为最后要。意义下,我们发现了一个这样的等式。再设地球的虫子的腿的个数为。我们可以列出这样的一个方程组。的虫子的腿的个数,其中。外星虫子的腿的个数为。现在我们的目标是求解这个。, 当然,使用普通的。求解这个问题,很明显,
2025-08-22 17:07:48
847
原创 【DP】单词的划分
为了便于对这个字符串进行分析,需要将它划分成若干个部分,每个部分称为一个单词。出于减少分析量的目的,我们希望划分出的单词数越少越好。对于每个长度,我们枚举所有的单词,我们可以使用 string 的 substr 函数求出末尾的字串,如果当前末尾的字串和当前枚举的单词可以对得上,那么我们就选这个单词。(字符串的长度不超过100) 第二行一个整数n,表示单词的个数。一个整数,表示字符串可以被划分成的最少的单词数。,因此最优解为2,另外注意,单词列表中的。的情况下,最大运算量大约是。倍,所以也是快的飞起,最大。
2025-08-16 19:55:09
633
1
原创 作者错了4次的传奇题解: P2723 [USACO3.1] 丑数 Humble Numbers
对于一给定的素数集合Sp1p2...pk, 考虑一个正整数集合,该集合中任一元素的质因数全部属于S。这个正整数集合包括,p1p1×p2p1×p1p1×p2×p3…(还有其它)。该集合被称为S集合的“丑数集合”。注意:我们认为1不是一个丑数。你的工作是对于输入的集合S去寻找“丑数集合”中的第n个“丑数”。保证答案可以用 32 位有符号整数表示。
2025-07-19 19:25:46
1137
2
原创 P3952 [NOIP 2017 提高组] 时间复杂度
本文介绍了NOIP2017提高组题目P3952的解法,该题要求判断给定程序的循环时间复杂度是否正确。题目涉及A++语言的循环结构解析,包括变量作用域管理和复杂度计算。作者提供了O(n)时间复杂度的优化解法,使用栈结构处理变量作用域和循环嵌套,通过预处理确定循环边界。代码实现分为语法检查、参数解析和时间复杂度计算三个部分,正确区分了O(1)和O(n^w)两种复杂度情况。测试样例验证了算法对语法错误、变量重复和复杂度匹配的准确判断。该解法思路清晰,采用跳标法优化,是处理循环嵌套问题的经典模拟题范例。
2025-07-17 15:51:53
797
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅