- 1
- 0
- 约8.37千字
- 约 100页
- 2023-07-06 发布于广东
- 举报
* 清华大学 张昆玮 * 前缀min的逆运算 点查询:查询x处f[x]的值 区间修改:x左边的所有超过K的值,变为K 把x的左右换一下……(囧) 整个f[-x]就是单调减的 一个单调减的序列可以看作是由一个普通序列经过前缀min得到的! 前缀min的逆运算是什么呢? 我们并不关心 第六十一页,共一百页,2022年,8月28日 * 清华大学 张昆玮 * 这样也行? 我们现在要维护的就是前缀min的逆运算后的原序列! 可是我们甚至不知道前缀min的逆运算是什么 不要紧,反正用不到。 点查询:查询x处f[x]的值直接返回维护序列的前缀min 区间修改:x左边的所有超过K的值,变为K把维护序列中的f[x]变为K 第六十二页,共一百页,2022年,8月28日 线段树,太灵活了! * 清华大学 张昆玮 * 第六十三页,共一百页,2022年,8月28日 但是不要迷信线段树 不要迷恋哥,哥只是个传说…… * 清华大学 张昆玮 * 第六十四页,共一百页,2022年,8月28日 * 清华大学 张昆玮 * 重要条件:区间加法 说了这么多,能使用线段树解决问题的关键: 区间加法,即区间的“性质”由子区间完全决定 包括但不仅限于求和,求最值,求染色状态 这里的“性质”有点像动态规划的状态表示 有时候,求的更多反而更容易 最简单的例子:求区间第二最值 如果实在不满足区间加法,就全完了 第六十五页,共一百页,2022年,8月28日 * 清华大学 张昆玮 * 不满足区间加法? 我们都知道线段树求区间平均值不难 那求一个区间中位数试试? 什么,还不难? 那你再求个众数? …… 第六十六页,共一百页,2022年,8月28日 * 清华大学 张昆玮 * 不满足区间加法! 越来越难的原因很简单 知道两区间的中位数,就知道和区间的中位数? 知道各自众数有什么用? …… 第六十七页,共一百页,2022年,8月28日 * 清华大学 张昆玮 * 超越中位数K-th number 给定一列数,反复求区间第k大数。 要求的更多反而更容易……更容易…… 线段树的每个区间必须保留更多的信息! 每个区间中存下区间所有数的有序数组 通过归并完成区间加法 第六十八页,共一百页,2022年,8月28日 * 清华大学 张昆玮 * 归并很慢 如果每做一次查询就归并若干个线段 复杂度就会达到O(n) 离散化!二分答案! 变为求:x是区间第几大数? 这可以分别二分查找若干线段得到。 总复杂度O(nlogn+Q*log2n) 另一种原创方法,后面再讲 第六十九页,共一百页,2022年,8月28日 * 清华大学 张昆玮 * 区间减法 如果有了区间减法…… 线段树就能如虎添翼 如“区间和”变成“前缀和” 操作能简单不少 同时也是能够使用树状数组的条件 但这不是必需的(和区间加法比一比) 第七十页,共一百页,2022年,8月28日 * 清华大学 张昆玮 * 这么简单? Func Query(s,t) // 询问从s到t闭区间 s = s – 1, t = t + 1; // 变为开区间 s += M, t += M; // 找到叶子位置 While not ((s xor t) == 1) do If ((s and 1) == 0) Answer += Tree[s + 1]; If ((t and 1) == 1) Answer += Tree[t – 1]; s = s 1, t = t 1; 第二十九页,共一百页,2022年,8月28日 * 清华大学 张昆玮 * C语言更简单! for (s=s+M-1,t=t+M+1;s^t^1;s=1,t=1) { if (~s1) Ans+=T[s^1]; if ( t1) Ans+=T[t^1]; } 第三十页,共一百页,2022年,8月28日 * 清华大学 张昆玮 * Warning 在将闭区间转化成开区间的时候可能越界1 理论上能放 [0,2^N) 的树 其实只能查询 [1,2^N - 2] 的范围 切记切记 第三十一页,共一百页,2022年,8月28日 * 清华大学 张昆玮 * 不要紧张 如果需要查询 0 就整个向后平移一下 所有下标加一! 如果需要在[0,1024)中查询1023结尾的区间? 慢!你的数据规模不是 1000 么? …… 如果真的要到1023,直接把总区间变成[0,2048) 就是这么狠! 第三十二页,共一百页,2022年,8月28日 * 清华大学 张昆玮 * 修改就更简单 Func Change(n,NewValue) n += M; Tree[n] = NewValue; While n 1 do n = n 1; Tree[n] = Tree[2n] + Tree[2n+1]; 第三十三页,
您可能关注的文档
最近下载
- 【物理】中考物理压强真题汇编(含答案)及解析.doc VIP
- 电子商务公司劳动合同(实习协议版2025).docx VIP
- 水驱油藏调剖堵水与调驱.ppt VIP
- 2012年英语专业四级考试真题文字版.doc VIP
- 单相半波可控整流电路.ppt VIP
- 2023届上海市黄浦区高三上学期期终调研测试高考一模英语试卷含详解.pdf VIP
- OptiStruct_Optimization_CN OptiStruct 优化 教程 讲义.pptx VIP
- 中华慈善总会达希纳患者援助项目患者知情同意书.docx
- 质量管理体系与保证措施(详细完整版).pdf VIP
- 护士执业资格高频真题含答案2025.docx VIP
原创力文档

文档评论(0)