首页 > 其他分享 >K-DTree 学习笔记

K-DTree 学习笔记

时间:2024-02-21 18:44:37浏览次数:19  
标签:mathbb DTree 10 text rev 笔记 学习 给定 operatorname

原理:沿 $x$ 轴,$y$ 轴交替依次按坐标点的中位数对半分开,直到只剩下一个点为止。

复杂度分析:考虑一条边只会横跨两个区间,所以沿坐标轴划分矩形数量与边界划分数量是同阶的。有 $T(n) = 2 \times T(\frac{n}{4}) + O(1)$,单次操作复杂度是 $\sqrt n$ 的。

例题:  

$\mathbb{T1} \ \ \text{区间逆序对个数} \ ,n \le 5 \times 10 ^ 4$  
$\mathbb{Q}$:询问 $[l,r]$ 的区间中逆序对的个数。  
$\mathbb{A}$:扫描线,考虑升维,用 K-DT 维护平面点的个数。


$\mathbb{T2} \ \ \text{方方方的数据结构} $  
题意:    
给定长为 $n$ 的序列 $a$,有以下几种操作:

$1$: $∀i ∈ [l, r], a_i ← a_i + x$  
$2$: $∀i ∈ [l, r], a_i ← a_i × x$    
$3$: 求 $a_p \operatorname{mod} 998244353$  
$4$: 撤销第 $p$ 个操作     
 


$1 ≤ n, m ≤ 1.5 × 10^5$

$\mathbb{A}$:考虑升维。维护每个时间维度的序列 $a$。那么每个操作会影响一个区间,直接 K-DT 维护所有点是 $O(n\sqrt {n^2} = n^2)$ 的,所以我们只维护询问的点,复杂度 $O(n\sqrt{n})$。


$\mathbb{T3} \ \ \text{网上看到的题} $  
题意:    
给定长度为 $n$ 的序列 $a$ 和长度为 $n$ 的 $01$ 序列 $b$,每次操作给定
$x$,将所有 $a_i = x$ 的位置 $b_i ← b_i ⊕ 1$,每次操作后求 $b$ 有多少段连续的 $1$。  
$1 ≤ n, m ≤ 5 × 10^4$

$\mathbb{A}$:直接维护段数不好做,考虑维护“断点”。向两端放两个 $0$,相邻 $01$、$10$ 的数量除以 $2$ 就是答案。我们把 $(a_i,a_{i+1})$ 放到平面,每次修改一条横线,一条竖线修改。

$\text{ps}$:这个维护“断点”的 $\text{trick}$ 比较常用。



$\mathbb{T4} \ \ \text{好像是 SOJ 的题} $   
题意:  
有一个长为 $4^n$ 的数组 $a$,有以下几种操作:   

$1$: 给定 $l, r, ∀i ∈ [l, r], a_i ← \left \lfloor  \sqrt{a_i} \right \rfloor $  
$2$: 给定 $l, r, v, ∀i ∈ [l, r], a_i ← a_i + v$  
$3$: 给定 $l, r, \text{求} ∑ ^{r}_{i = l} a_i$  
$4$: $∀i < \operatorname{rev}(i),\operatorname{swap}(a_i, a_{\operatorname{rev}(i)}),\operatorname{rev}(i)$ 表示 $i$ 二进制逆序的结果,如 $n = 2$ 时 $\operatorname{rev}(7) = 14$

$1 ≤ n ≤ 9, 1 ≤ m ≤ 3 × 10^4$  



$\mathbb{A}$:升维,维护 $(a_i, a_{\operatorname{rev}(i)})$,第 $4$ 个操作相当于交换坐标轴。第 $1$ 个操作运用势能分析可证明总复杂度是 $\sqrt{n} \times \log_2v$ 的。



$\mathbb{T5} \ \ \text{rrusq} $   
题意:  
平面上给定大小为 $n$ 的点集 $a$,点有点权,给定 $m$ 个矩形 $b_{1,···,m}$,有 $q$ 次询问,每次询问 $b_{l,··· ,r}$ 的所有矩形所覆盖的点权值之和。  
$1 ≤ n, m ≤ 10^5, 1 ≤ q ≤ 10^6$

$\mathbb{A}$:

首先考虑序列上的弱化版。

咕咕咕





标签:mathbb,DTree,10,text,rev,笔记,学习,给定,operatorname
From: https://www.cnblogs.com/Saka-Noa/p/18025995

相关文章

  • 【机器学习科学库】全md文档笔记:Jupyter Notebook和Matplotlib使用(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论人工智能相关知识。主要内容包括,了解机器学习定义以及应用场景,掌握机器学习基础环境的安装和使用,掌握利用常用的科学计算库对数据进行展示、分析,学会使用jupyternotebook平台完成代码编写运行,应用Matplotlib的基本功能实现图形显示,应用Matplotlib......
  • TCL学习:First Class Tcl Objects and Relationships
    前言:最近需要移植vivado工程到新板卡上。之前只学了基础TCL语法,复杂一点的指令看博客看文档对陌生名词挠头。才发现官方文档VivadoDesignSuiteTclCommandReferenceGuide(UG835)第一章的FirstClassTclObjectsandRelationships对Vivado用到的TCL的指令做了很好的知识铺......
  • sass快速入门笔记
    本文记录了sass基本内容,包含声明、嵌套、导入、混合等使用场景将反复使用的css属性值用一个变量声明,开发过程使用这个变量,方便后期修改该值,不用全局搜索替换(降低修改风险)。变量声明用关键字$声明变量受{...}定义范围影响,在{...}内定义的在外部不可使用$highlight-......
  • MySQL学习之触发器
    介绍触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数......
  • Multi-behavior Self-supervised Learning for Recommendation论文阅读笔记
    Abstract本文提出了一个多行为自监督学习框架,以及一种自适应优化方法。具体而言,我们设计了一个行为感知的图神经网络,结合自注意力机制来捕捉行为的多样性和依赖关系。为了增强对目标行为下的数据稀疏性和辅助行为的嘈杂交互的鲁棒性,我们提出了一种新的自监督学习范式,以在行为间和......
  • 《Effective Java》阅读笔记-第九章
    EffectiveJava阅读笔记第九章通用编程第57条将局部变量的作用域最小化将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能。将局部变量的作用域最小化,最好的办法就是在第一次使用变量的地方声明它。几乎每一个局部变量都应该进行初始化。第5......
  • 《Effective Java》阅读笔记-第八章
    EffectiveJava阅读笔记第八章方法第49条检查参数的有效性基于“发生错误后应尽快检测出错误”这一通用原则,应对方法的参数进行检查。Java7中增加了Objects.requireNonNull方法,可以很方便的对参数进行null检查并抛出异常:publicvoidsomeMethod(Stringargs){ar......
  • 《Effective Java》阅读笔记-第十一章
    EffectiveJava阅读笔记第十一章并发第78条同步访问共享的可变数据多线程访问变量时,需要进行同步,否则就会产生并发问题。同步代码块、加锁等或者直接不共享变量,也就是将可变数据限制在单个线程内。ThreadLocal这种第79条避免过度同步为了避免活性失败和安全性失败......
  • 《Effective Java》阅读笔记-第十章
    EffectiveJava阅读笔记第十章异常第69条只针对异常的情况才使用异常说白了就是不要吧你的业务逻辑用异常来写。举个反例比如用抛出异常来遍历一个数组:try{inti=0;while(true){range[i++].doSomething();}}catch(ArrayIndexOutOfBoun......
  • 《Effective Java》阅读笔记-第十二章
    EffectiveJava阅读笔记第十二章序列化第85条其他方法优先于Java本身的序列化Java本身的序列化漏洞过多,很容易被攻击。避免被序列化攻击的最好方式就是不要反序列化任何字节流,并且新的系统中没有任何理由使用Java本身的序列化。JSON和Protobuf是两种优秀的序列化......