CF19D Points 平衡树】的更多相关文章

题意:支持插入/删除点 $(x,y)$,查询一个点右上方横坐标与之最接近的点坐标. 我们可以对于每一个操作过的横坐标都开一个 $set$,然后再开一个平衡树,维护每个横坐标上最大的纵坐标. 然后查询点 $(x,y)$ 时就在平衡树查一下第一个横坐标大于 $x$,且最大值大于 $y$ 的就行了. $splay$ 中有一些细节需要注意一下. #include <set> #include <map> #include <cstdio> #include <algori…
解题关键:模板题(结合起来了) #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<cmath> #include<cstdlib> #define N 50050 #define inf (1<<30) #define sq(x) (x)*(x) using nam…
题目在这: 给出三种操作: 1.增加点(x,y) 2.删除点(x,y) 3.询问在点(x,y)右上方的点,如果有相同,输出最左边的,如果还有相同,输出最低的那个点 分析: 线段树套平衡树. 我们先离散化输入的x坐标,然后以每个坐标建立一棵平衡树来维护,这里可以直接用set或者map来维护就行了. 然后我们现在需要在x的右方找到最左最下大于(x,y)的点. 建立一棵线段树,维护的是区间的纵坐标的最值,而线段树的端点为离散后x的值. 1.我们每次插入的时候,直接在相应的平衡树中插入,然后更新一下线段…
在平面上进行三种操作: 1.add x y:在平面上添加一个点(x,y) 2.remove x y:将平面上的点(x,y)删除 3.find x y:在平面上寻找一个点,使这个点的横坐标大于x,纵坐标大于y,而且要求他的横坐标尽量小,如果有多个点满足,则选取横坐标尽量小的前提下,纵坐标最小的点. 方法: 将横坐标x离散化,每一个坐标x对应的y用一颗平衡树维护(C++中的set),则这颗平衡树支持增加和删除以及查找比y大的最小值的操作. 在此基础上,对于每一个询问,只需要遍历大于x的set,并且找…
传送门 Description 在一个笛卡尔坐标系中,定义三种操作: \(add(x,y)\),将点\((x,y)\)标记在坐标系上 \(find(x,y)\),查询点\((x,y)\)严格右上方中,横坐标最小的点.如果有多个,输出其中纵坐标最小的.没有则输出-1 \(remove(x,y)\),将点\((x,y)\)取消标记 Input 第一行是操作个数\(n\). 下面\(n\)行,每行对应一个操作. Output 每个查询操作输出一个答案. Hint \(n~\leq~10^5,|x|,|…
题目大意:有一些岛屿,一開始由一些无向边连接. 后来也有不断的无向边增加,每个岛屿有个一独一无二的重要度,问随意时刻的与一个岛屿联通的全部岛中重要度第k大的岛的编号是什么. 思路:首先连通性一定要用并查集维护.然后就是联通快内的第k大问题,显然是平衡树.可是并查集的合并怎么搞?能够考虑按秩合并,这种话就保证每次在平衡树中处理的元素尽量的少,就能够水过这个题了. 注意一下输出-1的推断. CODE: #include <map> #include <cstdio> #include…
简介 二叉搜索树, 可以维护一个集合/序列, 同时维护节点的 \(size\), 因此可以支持 insert(v), delete(v), kth(p,k), rank(v)等操作. 另外, prev(v) == kth(rt,rank(v)-1); next(v) == kth(rt,rank(v)+1). 平衡树通过各种方法保证二叉搜索树的平衡, 从而达到 \(O(\log n)\) 的均摊复杂度. Splay Splay 不仅可以实现一般平衡树的操作, 还可以实现序列的翻转/旋转等操作.…
题目大意:给出一棵树,每个节点有两个值,各自是这个忍者的薪水和忍者的领导力.客户的惬意程度是这个点的领导力乘可以取得人数.前提是取的人的薪水总和不超过总的钱数. 思路:仅仅能在子树中操作.贪心的想,我们仅仅要这个子树中cost最小的那些点就能够了. 所以就深搜一次.每到一个节点上.把自己和全部子节点的平衡树启示式和并,然后保留不超过总钱数的人数.统计.数据范围比較大,能开long long的地方不要吝啬. PS:吐槽一下,一開始这个题一直TTT.我以为是我常数写的太大了.别人都用左偏堆写.是不是…
每一个实数都能用有理数去逼近到任意精确的程度,这就是有理数的稠密性.The rational points are dense on the number axis.…
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. 这道题给了我们一堆二维点,然后让我们求最大的共线点的个数,根据初中数学我们知道,两点确定一条直线,而且可以写成y = ax + b的形式,所有共线的点都满足这个公式.所以这些给定点两两之间都可以算一个斜率,每个斜率代表一条直线,对每一条直线,带入所有的点看是否共线并计算个数,这是整体的思路.但是还有…