KD-tree
L_0_Forever_LF
一个热爱OI的OIer
展开
-
KD_tree 板子
例题:3489: A simple rmq problem在[l,r]内找只出现一次的,最大的数 用pre记录每个位置的数上次出现位置,nex记录下次出现位置 一个位置i的值在[l,r]内只出现一次,那么 l <= i <= r , prei< l, nexi>r,所以给一个点三维坐标(i,prei,nexi),询问时用kd-tree找(l~r,0~l-1,r+1~n+1)里最大的值code原创 2017-03-19 15:59:54 · 994 阅读 · 0 评论 -
BZOJ4154: [Ipsc2015]Generating Synergy
树套树或kd-tree 点a的dfs序为一维,另一维是a的层数code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#include<vector>#incl原创 2017-03-25 08:13:22 · 914 阅读 · 0 评论 -
BZOJ4170: 极光
将每个位置的位置定为x,graze值定为y 那么任意位置上出现过的任意数值就对应上了平面上的若干个点 每次询问和一个点的哈密顿距离 <= x的点的个数 将哈密顿距离转为切比雪夫距离(x,y)−>(x+y,x−y)(x,y)->(x+y,x-y) 和一个点切比雪夫距离 <= x的点对应平面上一个矩形 那么询问就变成了询问平面上一个矩形内的点的个数 用KD-tree或cdq都是兹瓷的code原创 2017-04-26 08:32:07 · 1033 阅读 · 0 评论 -
BZOJ3833: [Poi2014]Solar lamps
可以将给出的直线视作向量,那么当这两个向量不共线时(共线时情况类似),建立出以这两个向量为基底的坐标系,将坐标取反后,每盏灯(x,y)亮了后,能照亮的区域是(<=x,<=y),然后直接暴力弄这个东西就行了 因为不会写树套树qwq,我写了kd-tree,卡了半天卡过去了qwq 为了减小常数写了指针和一些奇奇怪怪的东西,代码可能不会很友好code:#include<set>#include<map原创 2017-11-29 21:35:57 · 368 阅读 · 0 评论 -
BZOJ4066: 简单题
50s卡过..不知道为什么这么慢格子(x,y)里的加A可以直接插入一个值为A的点(x,y),如果原来有这个点了也没关系 因为插入可能导致树不平衡,所以用替罪羊树的重构思想,不满足平衡条件时暴力重构子树code:#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<climits>#include原创 2017-03-25 08:19:42 · 900 阅读 · 0 评论