摸×3

呃呃呃摆烂一上午,下午继续来听shr的专题


三维数点?

把一个立方体拆成8个(八分之一空间)
常数较大→注意常数

去看了会儿并查集,结果感觉漏掉了挺重要的事情……?优化常数的?

对于\((a_i,b_i,c_i)\sim(A_{i},B_{i},C_{i})\)的立方体查询,搞成八分之一空间答案就是

\[(A_{i},B_{i},C_{i}) \]

\[-(a_{i-1},B_{i},C_{i})-(A_{i},b_{i-1},C_{i})-(A_{i},B_{i},c_{i-1}) \]

\[+(A_{i},b_{i-1},c_{i-1})+(a_{i-1},B_{i},c_{i-1})+(a_{i-1},b_{i-1},C_{i}) \]

\[-(a_{i-1},b_{i-1},c_{i-1}) \]

超好理解的


做法有CDQ分治,树套树,KDT

k维数点可以KDT或CDQ套CDQ套CDQ……

CDQ分治

解决多为限制问题 \(O(log\ n)\)解决一维
要求一维中求得答案满足结合律
偏序问题


在值域上不断 分治。对于一维,先噶出一个\(mid\),每次只处理\(x_{i}<mid\)的修改操作对于\(x_{i}\geqslant mid\)的查询的贡献

小剪枝:对于一个区间,没有任何操作就return掉

然后就固定了一维,就变成了二维数点

amazing


三维数点模板

好困好困,难以思考。

求出\(f(i)\)之后桶一下就行了

问题是怎么求\(f(i)\)

先按照第一位升序排序一下,然后每次分治固定一维

根据 \(mid\) 搞成两半,左右的第一维限制一定是满足要求的,所以数满足剩下两维限制的就行了,也就是二位数点一下就行了。

amazing 然后咋做

噢噢噢我悟了

然后把右半边的归为“查询”,左半边的归为“修改”,然后就完了

喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔

但怎么维护这些点呢……不用维护,直接做做完了

好神奇喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔

例题1.1

很简,按照时间分治就行了。

例题1.2

反过来变为加点就行了

不对,感觉没这么简单

算了

呃呃呃呃呃我不应该摸鱼的……算了再摸会儿

例题1.3

正在津津有味地看着题目背景,结果猝不及防地看到了他的名字缩写

行,不做这题了

算了,看一眼

这不就是HH的项链再加一维限制吗?

不想思考了,想继续写小作文

突然感觉不太妙,现在我的密码已经可以被万恶的fjj破解了

算了,也没什么可藏的了

仍然需要维护一个\(pre\)


CDQ可以用来解决三维数点,也可以解决DP

比如说

例题2.1

哎,不想思考了,还是去打个板子吧


Ehhhh Ah


所以最后还是没有打

哎 我好菜——

posted @ 2024-12-08 16:43  还是沄沄沄  阅读(8)  评论(1编辑  收藏  举报