首页 > TAG信息列表 > FHQTreap
P1503 鬼子进村
题面 县城里有 \(n\) 个用地道相连的房子,初始时全部房屋未被摧毁,第 \(i\) 个只与第 \(i-1\) 和第 \(i+1\) 个相连。这时有 \(m\) 个消息依次传来: 若消息为 D x:鬼子将 \(x\) 号房子摧毁了,地道被堵上。 若消息为 R :村民们将鬼子上一个摧毁的房子修复了。 若消息为 Q x:有一名士CF702F-T-Shirts【FhqTreap】
正题 题目链接:https://www.luogu.com.cn/problem/CF702F 题目大意 有\(n\)个物品,第\(i\)个价格为\(c_i\),质量为\(q_i\)。 然后有\(m\)个询问,假设一个人有\(v_i\)块,他每次会买他能买得起的\(q_i\)最大的(如果相同就\(c_i\)最小的)物品购买,直到买不起为止,一个物品只能买一次,求他最后「数据结构」 FHQTreap
FHQTreap \(\text{FHQ Treap = Tree + Heap}\) FHQTreap 通过给节点赋一个随机数,当作这个点的优先级,通过随机化让平衡树尽可能的平衡。令人惊喜的是,FHQTreap 的中序遍历能得到原来的序列。那么,我们应该如何维护 FHQTreap 呢? 存储 我们需要以下变量来存储: struct FHQTreap{ inLOJ#503. 「LibreOJ β Round」ZQC 的课堂(容斥+FHQTreap)
题面 传送门 题解 首先\(x\)和\(y\)两维互相独立,可以分开考虑,我们以\(x\)为例 我们把\(x\)做个前缀和,那么就是问有多少\(i\)满足\(s_is_{i-1}<0\),其中\(s_0=1\)。这个条件等价于\(\max(s_i,s_{i-1})>0\)且\(\min(s_i,s_{i-1})<0\)。我们可以容斥一下,就是总数减去\(\max(s_i,s_{i-1}FhqTreap的区间翻转
学 Fhq 就是为了尽量不去写某毒瘤数据结构,所以自然要来杠一杠某数据结构的经典操作:区间反转 听起来玄乎,但只需要一个小 trick 就行了:把原来的区间以下标作为权值建成 Treap , 这样整棵 Treap 的中序遍历就是原区间. 按照这种方法建树,是进行区间操作的第一步.接下来我们考虑如[模板]fhqTreap
用途 平衡树(可实现区间翻转) 原理 和treap一样,中序遍历表示权值的顺序,并且每个点有一个随机的附加值,形成一个堆来保证复杂度 但是不旋转,所有操作通过split和merge实现 分为两种split:按权值和按排名 代码 luogu3369 普通平衡树 1 #include<bits/stdc++.h> 2 #define pa pair<in