线段树区间修改与懒标记实战:从东方博宜OJ 2390掌握核心代码
1. 从一道题开始为什么要用线段树如果你刷过东方博宜OJ应该对2390这道“区间修改与查询”有印象。每次遇到区间操作新手的第一反应往往是暴力遍历——反正数组开出来for循环走一圈改完再for循环查一遍。数据量小的时候确实没问题一旦n和m都跑到10万级别两重循环动辄10的10次方次运算稳稳超时。这时候就需要线段树出场了。线段树是一种基于分治思想的二叉树结构核心思路是把一个数组区间不断二分每个节点维护对应子区间的信息。比如求区间最大值根节点存整个数组的最大值左孩子存左半段的最大值右孩子存右半段的最大值。查询的时候从根节点往下走只需要访问覆盖目标区间的少数几个节点就能快速拼出答案。我当年第一次接触线段树时最大的困惑是明明每个节点只存了一个“汇总值”区间修改的时候要改动的节点可能很多这样复杂度不还是O(n)吗后来才知道线段树的完整形态必须配套一个关键机制——懒标记Lazy Propagation否则区间修改的效率根本提不上来。这道2390题就是专门训练这个组合拳的。这道题的定位很清晰它不考高深的数学推导也不考复杂的变式结构就是让你老老实实掌握线段树最基础、最核心的两种操作——区间批量更新和区间聚合查询。把这道题吃透后面再遇到区间求和、区间最值、区间GCD甚至带乘法的混合区间操作思路都是相通的。2. 区间修改为什么难暴力做法的复杂度陷阱先看题目要求。这里我按照OJ上常见的描述理解给定长度为n的数组进行m次操作操作分两类区间修改把区间[l, r]内每个元素都加上一个值v区间查询查询区间[l, r]内所有元素的和有的版本是查最大值依题目设置而定n和m大致在10^5量级。暴力做法最坏情况是每次操作都遍历整个区间总复杂度O(nm)10^10级别的计算量任何OJ都不可能让你通过。而线段树的单次操作复杂度是O(log n)总复杂度O(m log n)10^5乘以17左右大约170万次操作瞬间就从“绝对超时”变成“轻松秒过”。不过在实际写代码的时候很多第一次学线段树的人会犯一个“伪线段树”的错误建树、查询都写对了一遇到区间修改就老老实实递归到每个叶子节点去更新。这样一来修改单个元素的复杂度是O(log n)但修改整个区间等于修改区间内每个元素复杂度又退化回了O(k log n)其中k是区间长度最坏情况依然是O(n log n)卡在大数据上照样超时。懒标记就是专门解决这个问题的。打个比方。懒标记的逻辑很像“记账”而不是“实时结清”。假设你有100个账本老板让你把第1到第100页每页都加10块钱。老实人的做法是翻开每一页把数字一个个改掉100页就得改100次。懒标记的做法是在第1页贴一张便签“往后所有页10”先不真正动手改等哪天有人真要查询某一页的金额时再顺着便签把账算清楚。如果一直没人查询便签就一直贴着省下了大量重复劳动。线段树里的懒标记就是这张便签。区间修改时如果当前节点代表的区间被目标区间完全覆盖就不再往下递归只在这个节点上打一个标记同时把这个节点的数据更新掉。等到未来某个时候需要访问这个节点的子节点时再把标记下推给孩子们顺便把孩子们的数据也修正。这个“先记在账上后统一结算”的思路把区间修改的复杂度从O(k log n)降到了O(log n)彻底解决了退化问题。理解懒标记是真正跨过线段树门槛的标志。3. 核心结构设计与建树细节写线段树之前先把存储结构定下来。我习惯用结构体数组每个节点存四个字段struct Node { long long sum; // 区间和 long long lazy; // 懒标记记录该区间整体加了多少 };为什么sum要用long long因为n和v都在10^5量级时区间和最高能到10^15int完全装不下。这个问题我见过太多人踩坑建议直接无脑long long不要赌数据范围。树的大小一般开4倍n。线段树不是满二叉树用2n的数组在某些边界情况下会越界4n是经过验证的安全余量。尽管浪费一点内存但在竞赛场景下换来的安心完全值得。建树的过程是递归的。如果是叶子节点直接赋初始值否则递归建左子树和右子树然后通过左右孩子的和拼出当前节点的sum。这里的终止条件、递归边界和后面的查询、修改是同一个套路必须写熟练。void build(int node, int l, int r) { if (l r) { tree[node].sum a[l]; return; } int mid (l r) 1; build(node 1, l, mid); build(node 1 | 1, mid 1, r); tree[node].sum tree[node 1].sum tree[node 1 | 1].sum; }这里有一个容易混淆的点节点编号和数组下标是完全两套体系。输入数组a的下标对应原始数据位置而tree数组的下标是线段树节点的编号两者通过递归区间[l, r]关联。初学时经常会不小心把两者混在一起导致建树时下标错乱排查半天不知道错在哪。我的经验是在代码里先用中文注释分清“这是数据下标”还是“这是节点编号”写多了自然就顺了。4. 懒标记的完整实现修改与下推区间修改的代码是整个题目的灵魂。核心函数有两个modify用于执行更新pushdown用于把当前节点的懒标记下传给子节点。先看modify。参数中的ql和qr代表目标修改区间l和r代表当前节点覆盖的区间。分三种情况处理void pushdown(int node, int l, int r) { if (tree[node].lazy 0) return; int mid (l r) 1; int leftChild node 1; int rightChild node 1 | 1; tree[leftChild].lazy tree[node].lazy; tree[leftChild].sum tree[node].lazy * (mid - l 1); tree[rightChild].lazy tree[node].lazy; tree[rightChild].sum tree[node].lazy * (r - mid); tree[node].lazy 0; } void modify(int node, int l, int r, int ql, int qr, long long v) { if (ql l r qr) { tree[node].lazy v; tree[node].sum v * (r - l 1); return; } pushdown(node, l, r); int mid (l r) 1; if (ql mid) modify(node 1, l, mid, ql, qr, v); if (qr mid) modify(node 1 | 1, mid 1, r, ql, qr, v); tree[node].sum tree[node 1].sum tree[node 1 | 1].sum; }重点理解两个地方。第一完全覆盖时的操作顺序。先修改sum再修改lazy二者不能颠倒。sum代表“当前区间真实的累计值”必须立刻体现这次修改的影响lazy代表“欠子节点的账”先挂账后面再还。如果用生活化的比喻sum是账户余额lazy是“应发未发的工资”工资可以先记着不发但余额得当场变。第二部分覆盖时为什么要先pushdown。因为当前节点可能带着之前的懒标记这些标记只记在本节点上子节点还不知情。现在要下探到子节点去修改就必须先把旧账结清否则子节点的sum是基于过时数据算出来的改出来的结果全是错的。这一个坑几乎是所有线段树初学者必踩的half-correct的输出结果正是漏了pushdown的典型症状。pushdown里两个子区间的长度计算也别搞错。左孩子覆盖区间是[l, mid]长度是mid - l 1右孩子覆盖区间是[mid1, r]长度是r - mid。乘上lazy值就是子节点sum该加的量。这里如果手滑写成mid - l或者r - mid 1在小数据上可能碰巧看不出来大数据上直接WA。5. 查询操作与递归边界的细节查询操作的逻辑和修改类似只是不再更新数据。目标区间完全覆盖当前节点时直接返回这个节点的sum因为懒标记已经在modify时同步更新过了这个sum是真实可靠的。long long query(int node, int l, int r, int ql, int qr) { if (ql l r qr) { return tree[node].sum; } pushdown(node, l, r); int mid (l r) 1; long long res 0; if (ql mid) res query(node 1, l, mid, ql, qr); if (qr mid) res query(node 1 | 1, mid 1, r, ql, qr); return res; }这里有个细节值得反复强调查询的时候也要pushdown。很多人觉得查询是“只读”操作不修改任何数据为什么还要下推标记原因在于当前节点带着lazy标记时它的孩子节点的sum并没有同步更新过。当目标查询区间落入孩子的管辖范围时如果不先下推往下递归拿到的就是过时数据查出来的答案是错的。换句话说pushdown是“进入子节点之前的强制结算”。无论是修改还是查询只要需要往下走就必须先下推。把这条规则牢牢记住能避免大量隐蔽的错误。还有一个细节是递归边界条件的写法。标准的写法是if (ql l r qr)含义是“当前节点区间完全被目标区间覆盖”。有些初学者会写成if (l ql r qr)逻辑上等价但容易被搞混。我建议固定用一种写法ql l r qr读起来就是“目标区间的左边界在当前区间左边右边界在当前区间右边”也就是当前区间整个被包住直观且不容易错。6. 完整AC代码与逐段分析把上面的函数组合起来加上输入输出和main函数就是一个完整的可提交版本#include bits/stdc.h using namespace std; const int MAXN 100005; struct Node { long long sum; long long lazy; } tree[MAXN 2]; long long a[MAXN]; void build(int node, int l, int r) { if (l r) { tree[node].sum a[l]; return; } int mid (l r) 1; build(node 1, l, mid); build(node 1 | 1, mid 1, r); tree[node].sum tree[node 1].sum tree[node 1 | 1].sum; } void pushdown(int node, int l, int r) { if (tree[node].lazy 0) return; int mid (l r) 1; int leftChild node 1; int rightChild node 1 | 1; tree[leftChild].lazy tree[node].lazy; tree[leftChild].sum tree[node].lazy * (mid - l 1); tree[rightChild].lazy tree[node].lazy; tree[rightChild].sum tree[node].lazy * (r - mid); tree[node].lazy 0; } void modify(int node, int l, int r, int ql, int qr, long long v) { if (ql l r qr) { tree[node].lazy v; tree[node].sum v * (r - l 1); return; } pushdown(node, l, r); int mid (l r) 1; if (ql mid) modify(node 1, l, mid, ql, qr, v); if (qr mid) modify(node 1 | 1, mid 1, r, ql, qr, v); tree[node].sum tree[node 1].sum tree[node 1 | 1].sum; } long long query(int node, int l, int r, int ql, int qr) { if (ql l r qr) { return tree[node].sum; } pushdown(node, l, r); int mid (l r) 1; long long res 0; if (ql mid) res query(node 1, l, mid, ql, qr); if (qr mid) res query(node 1 | 1, mid 1, r, ql, qr); return res; } int main() { int n, m; scanf(%d%d, n, m); for (int i 1; i n; i) { scanf(%lld, a[i]); } build(1, 1, n); while (m--) { int op, l, r; scanf(%d%d%d, op, l, r); if (op 1) { long long v; scanf(%lld, v); modify(1, 1, n, l, r, v); } else { printf(%lld\n, query(1, 1, n, l, r)); } } return 0; }逐段分析一下关键点。MAXN 2表示开4倍空间。这里用位运算左移两位代替乘4是竞赛选手的常见写法性能上没差别但看起来更“老练”。如果你不习惯位运算直接写4 * MAXN完全没问题不影响正确性。build里对叶子节点的处理注意输入数组下标从1开始这样区间[l, r]的含义更直观也方便后续用mid (l r) 1做二分。如果你的输入下标从0开始需要整体调整容易出错我建议统一改成从1开始。modify函数里完全覆盖时先更sum再更新lazy这个顺序前面讲过了。部分覆盖时先pushdown再分别判断左右孩子是否与目标区间有交集。注意这里用的是两个独立的if不是if-else。因为目标区间可能横跨mid左右两边都需要递归。query函数返回的是累加结果初始化为0。如果题目改成求最大值这里就要改成初始化为极小值然后取max。这提醒我们线段树的框架是固定的但节点存什么、聚合操作是什么完全由题目决定。2390这道题用求和是最友好的入门场景。7. 时间复杂度与空间复杂度的账本线段树为什么快可以从复杂度上算一笔明白账。建树过程需要访问所有节点总节点数约为2n到4n所以建树复杂度O(n)。每次修改或查询从根节点到目标区间最多经过O(log n)层每一层只访问常数个节点单次操作复杂度O(log n)。因此m次操作的总复杂度O((nm)log n)在nm10^5时大约是上百万次基本操作现代CPU可以在一眨眼之间完成。空间方面4n个节点每个节点两个long long总计8 * 2 * 4 * 10^5 6.4MB内存毫无压力。对比一下暴力做法区间修改是O(区间长度)最坏O(n)区间查询也是O(区间长度)最坏O(n)。n次操作最坏O(n^2) 10^10如果每秒钟跑10^8次操作需要的运行时间是100秒远超OJ通常的1到3秒时限。这就是算法和数据结构的价值所在把10^10压到10^6差了四个数量级从不可能变成可能。学线段树的时候时刻想着这笔复杂度账很多设计就自然理解了——为什么要有懒标记为什么要开4倍空间为什么递归边界要那么写全都有迹可循。8. 常见错误与调试技巧实录写了这么多年算法题线段树相关的错误见过太多这里把典型的、容易反复出现的坑一次性列出来。第一忘记pushdown。这个错误的表现很隐蔽小数据测试都正常一上大数据就WA。原因是小数据时懒标记可能恰好没触发下推场景或者触发后错误被掩盖了。排查方法是在修改和查询的递归入口处打印当前节点区间和lazy值如果发现lazy非零但孩子节点的sum看起来不对那基本就是pushdown漏了。第二sum没开long long。这个问题尤其出现在把模板从最大值题改成求和题的时候。最大值可能不超过int但区间和累加起来轻松超越int上限。建议一律long long不要心存侥幸。第三递归边界写错。比如把完全覆盖的条件ql l r qr误写成l ql qr r含义完全不同。前者是“目标区间包住当前区间”后者是“当前区间包住目标区间”后者会导致递归无限进行栈溢出。这种错误要靠理解而非背诵来避免建议调试时打印l和r观察区间是否在收敛。第四多组数据没重置数组。有些OJ题目有多组测试数据如果tree数组和lazy没有清零上一次的运行结果会污染下一次。解决方法是每次建树前用memset清零或者更稳妥地在build时对每个访问到的节点显式初始化。第五查询时把lazy下推了但没更新当前节点的sum。有人会问pushdown把lazy分给孩子后当前节点的sum是否需要重新计算答案是不需要因为pushdown发生时当前节点的sum已经包含了lazy的贡献——当初修改时sum就把v乘上区间长度加进去了lazy只是“待转发给孩子的部分”。下推后当前节点的sum保持不变孩子节点的sum增加。这个逻辑绕的人很多但想通了就很简单sum存的是整棵子树的总和懒标记分发只是把“记账”分摊到子节点总和不变。调试线段树还有一个高效技巧写一个暴力版本做对拍。在本地写一个O(n)的暴力代码生成随机数据把线段树版本和暴力版本的结果逐一对比。一旦不一致用二分法缩小测试数据规模找到最小的失败用例再手工推演。我有一次调一个很隐蔽的懒标记bug就是对拍时用一个20条数据的随机测试暴露出来的自己看代码怎么都看不出来一对比数据就一目了然。9. 从2390延伸线段树的常见变形与练习路径把2390做熟之后线段树的大门才刚刚打开。积累几道常见的变形题你的线段树能力才算真正稳固。第一区间取最大值/最小值。很简单把sum换成max或minpushdown时用lazy更新子节点的方法不变但聚合逻辑要改成max/min查询的初始值也要相应调整。第二区间乘法加法双懒标记。这类题需要两个lazy标记一个存乘数mul一个存加数add。更新优先级很关键先乘后加因为(Ab)c和Ac b*c不同处理不好就乱了这是线段树的进阶必修课。第三区间替换把区间内所有元素赋值为同一个值。和区间加类似但赋值时懒标记是覆盖而非累加需要分清set操作和add操作的语义差异。第四单点修改区间查询。这种是最简版线段树甚至不需要懒标记很多初学者会误以为这就是全貌。其实单点修改根本没有“批量延迟”的需求复杂度只靠分段结构就能保证。很多人在这种简化版上写顺手了再遇到区间修改又懵了最好先学简化版理解结构再学懒标记理解优化。练习路线上我建议按这个顺序先写单点修改区间求和的裸题再写区间修改区间求和的2390然后尝试区间加区间最大值的组合题最后挑战双懒标记或区间翻转。每一步都配合对拍验证不要只满足“过了样例”。10. 顺手解决东方博宜OJ 1168的思路迁移搜这道题的人还会经常碰见“东方博宜OJ 1168”之类的问题。1168具体是什么题我记不太清了但按经验这类编号靠前的题目通常是入门级数据结构题。如果你已经能把2390的完整代码默写出来1168的难度大概率低于2390思路直接迁移即可。比如如果1168是单点修改区间求和那完全不需要懒标记把modify里的懒标记逻辑去掉只在叶子节点上更新然后逐层回溯sum就行。如果1168是某个区间的特殊统计只需要改节点的聚合逻辑存的结构从sum改成需要的字段合并函数相应调整。核心方法都一样——先画出区间图弄清楚每个节点存什么如何合并左右孩子的信息如何在修改时保持节点信息的正确性这就是线段树的所有真谛。数据结构题不同于数学题套路性很强。一遍写不对很正常但要确保每一次调错之后都想明白“为什么错”。我见过太多人把模板背下来直接粘贴换个题目背景就不会用。真正的理解是你能自己推导出懒标记的记账逻辑能在黑板上画出区间树能解释每一步代码为什么存在。到了这个程度2390不仅做完了线段树这门基本功也真正打牢了。我个人实际带过的经验是线段树的懒标记这一关80%的人卡在“为什么查询也要下推标记”这个问题上。如果你看到这里也觉得这一点茅塞顿开那这道题你已经拿下一大半了。剩下的无非是多敲几遍代码让手感和理解同步到位。

相关新闻

32位Windows下HANA ODBC驱动安装配置与避坑指南

32位Windows下HANA ODBC驱动安装配置与避坑指南

简介:本资源为SAP HANA ODBC驱动32位Windows安装包,面向仍在使用32位应用程序或操作系统的开发、测试与运维人员,解决32位环境无法直接连接SAP HANA数据库的问题。ODBC作为标准数据库访问接口,配合该驱动可让报表工具、数据分析程…

2026/10/11 22:17:02 阅读更多 →
基于PostgreSQL的混合检索方案:pgvector+全文检索替代向量数据库

基于PostgreSQL的混合检索方案:pgvector+全文检索替代向量数据库

企业内的知识库检索做到一定规模,总会被一句话刺到:"要么买商用向量数据库,要么自己拼一套,但拼出来又不稳定。"我自己在一家中等规模的公司里做过两年知识库平台,初期确实也动过采购专用向量库的念头&#…

2026/10/11 22:17:02 阅读更多 →
Nacos未授权访问漏洞排查与修复实战:从原理到鉴权加固

Nacos未授权访问漏洞排查与修复实战:从原理到鉴权加固

最近做安全巡检,漏洞扫描报告里“Nacos namespaces未授权访问漏洞【原理扫描】”这条几乎成了标配。一开始我还觉得是扫描器误报,毕竟我们 Nacos 控制台一直有登录页,后来仔细一测才发现,问题出在 API 层——控制台加了登录&#…

2026/10/11 22:16:01 阅读更多 →

最新新闻

华为IPD流程管理详解:以投资决策为核心的研发治理体系

华为IPD流程管理详解:以投资决策为核心的研发治理体系

简介:这套《华为IPD流程管理详细版》PPT课件共96页,围绕华为集成产品开发(IPD)方法展开,适合产品研发管理者、项目经理、流程管理人员及有意引入IPD体系的企业团队学习。资源包含1个PPT文件,体积2.32MB&…

2026/10/11 23:02:46 阅读更多 →
多智能体协作系统架构设计与工程实践:从角色划分到生产部署

多智能体协作系统架构设计与工程实践:从角色划分到生产部署

1. 从"agency-agents"这个名字说起:它到底在解决什么问题第一次看到"agency-agents"这个组合词,很多人会愣一下——agency(代理/机构)加上agents(智能体/代理者),两个词义上…

2026/10/11 23:02:46 阅读更多 →
YOLOv5知识蒸馏实战:教师-学生模型对齐与多任务Loss设计

YOLOv5知识蒸馏实战:教师-学生模型对齐与多任务Loss设计

简介:本资源是一套面向深度学习工程师与计算机视觉初学者的YOLOv5知识蒸馏实战代码包,聚焦模型轻量化落地需求,解决小算力设备部署高精度目标检测模型的核心难题。资源共8个文件,含4个压缩包(涵盖数据集、蒸馏代码、说…

2026/10/11 23:02:46 阅读更多 →
YOLO猴子检测实战:4690张图像数据集从校验到训练微调

YOLO猴子检测实战:4690张图像数据集从校验到训练微调

简介:这是一份面向目标检测开发者的猴子检测数据集,适用于YOLO系列算法,可直接用于模型训练、验证与测试。数据已预先划分训练、验证、测试集,并附带data.yaml配置文件,适配YOLOv5、YOLOv7、YOLOv8、YOLOv9、YOLOv10、…

2026/10/11 23:02:46 阅读更多 →
LingBot-World 2.0 无限视频的秘密:local_attn_size 滑动窗口 KV Cache 与 sink_size 注意力汇聚机制源码解析

LingBot-World 2.0 无限视频的秘密:local_attn_size 滑动窗口 KV Cache 与 sink_size 注意力汇聚机制源码解析

【免费下载链接】lingbot-world-v2 Infinite Worlds with Versatile Interactions 项目地址: https://gitcode.com/gh_mirrors/li/lingbot-world-v2 点击查看 免费下载 LingBot-World 2.0 是一个开源的无限交互世界视频生成项目:给一张图 一串动作轨迹…

2026/10/11 23:02:45 阅读更多 →
药品包装盒数据集1032张VOC+YOLO双格式:训练、踩坑与迁移实战

药品包装盒数据集1032张VOC+YOLO双格式:训练、踩坑与迁移实战

简介:药品包装盒数据集包含1032张真实药品包装盒图片,已按Pascal VOC与YOLO两种主流格式完成标注,可直接用于目标检测模型的训练、验证和算法教学。包内共2000个文件,涵盖1032张jpg图像、1032个xml标注文件及1032个txt标注文件&am…

2026/10/11 23:01:45 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →