bzoj4605: 崂山白花蛇草水


题意

Q(<=100000)次操作,支持:
在二维平面上插入一个坐标(x,y)(x,y<=500000),点权为v(<=1e9)的点;
查询矩形区域内第K大点权。
强制在线。


题解

今天neither问我在做什么题,我说是一个kdt模板题
双log的话空间似乎会炸?
所以就线段树套KDT了。
对于插入操作,我们把一个点插到权值线段树上对应的log棵KDT里。因为带插入KDT需要替罪羊式重构来保证平衡,所以单次复杂度log^2。
对于查询操作…直接在线段树上一路查下去就可以,单次复杂度是根号*log的。
这个整体复杂度是O(nlog2n(log2n+n−−√))O(nlog2⁡n(log2⁡n+n))O(n\log_2{n}(\log_2{n}+\sqrt{n}))。
怎么看都会炸,但是可以过(笑


代码

为什么我 跑得 这 么 慢
↑然后发现自己每篇题解里几乎都出现了这句话。。
我自带巨大常数 QAQ

#include<bits/stdc++.h>
#define N 100005
#define V 3000005
using namespace std;
char ch;
int lans;
inline void rd(int &x)
{x=0;while((ch=getchar()-'0')<0|ch>9);for(;ch>-1&ch<10;x=(x<<3)+(x<<1)+ch,ch=getchar()-'0');x^=lans;
}
int q,l,r,mid,i,k,rt[V],C[2][V],Cnt=1,
c[2][V],xx[2][V],mx[2][V],mn[2][V],sz[V],cnt,
op,p,X[2],x2,y2,st[N],nxt[N],t;
bool dir[V];
void Del(int &x)
{if(!x)return;st[++t]=x;Del(c[0][x]),Del(c[1][x]),x=0;
}
bool cmp(int x,int y)
{return xx[t][x]<xx[t][y];}
int reb(int L,int R,bool mode)
{int Mid=L+R>>1,ret;t=(mode^=1);nth_element(st+L,st+Mid,st+R+1,cmp);dir[ret=st[Mid]]=mode,sz[ret]=R-L+1;for(int j=0;j<2;j++)mn[j][ret]=mx[j][ret]=xx[j][ret];if(L<Mid)c[0][ret]=reb(L,Mid-1,mode);if(Mid<R)c[1][ret]=reb(Mid+1,R,mode);for(int m=0;m<2;m++)for(int j=0;j<2;j++)if(c[m][ret])mn[j][ret]=mn[j][mn[j][ret]<mn[j][c[m][ret]]?ret:c[m][ret]],mx[j][ret]=mx[j][mx[j][ret]>mx[j][c[m][ret]]?ret:c[m][ret]];return ret;
}
int qry(int x)
{if(!x)return 0;if(X[0]<=mn[0][x]&&X[1]<=mn[1][x]&&mx[0][x]<=x2&&mx[1][x]<=y2)return sz[x];return (X[0]<=xx[0][x]&&X[1]<=xx[1][x]&&x2>=xx[0][x]&&y2>=xx[1][x])+(X[dir[x]]>mx[dir[x]][c[0][x]]?0:qry(c[0][x]))+((dir[x]?y2:x2)<mn[dir[x]][c[1][x]]?0:qry(c[1][x]));
}
int main()
{rd(q),rd(q);while(q--){rd(op),op^=lans;rd(X[0]),rd(X[1]);l=1,r=1e9;if(op<2){rd(k),p=1;for(;;){sz[++cnt]=1;for(int j=0;j<2;j++)mn[j][cnt]=mx[j][cnt]=xx[j][cnt]=X[j];if(i=rt[p]){y2=0;qwq:sz[i]++,x2=X[dir[i]]>xx[dir[i]][i];for(int j=0;j<2;j++)mn[j][i]=mn[j][i]<X[j]?mn[j][i]:X[j],mx[j][i]=mx[j][i]>X[j]?mx[j][i]:X[j];if(!c[x2][i])c[x2][i]=cnt,dir[cnt]=dir[i]^1;else if(c[x2][i][sz]+1<<2>sz[i]*3)st[t=1]=cnt,Del(x2=i),y2?c[c[1][y2]==i][y2]=reb(1,t,dir[y2]):(rt[p]=reb(1,t,1));else{i=c[x2][y2=i];goto qwq;}}else rt[p]=cnt;if(l==r)break;(x2=(mid=l+r>>1)<k)?l=mid+1:r=mid;p=C[x2][p]=C[x2][p]?C[x2][p]:++Cnt;}}else{rd(x2),rd(y2),rd(k);if((i=qry(rt[p=1]))<k)lans=0,puts("NAIVE!ORZzyz.");else{while(l<r){mid=l+r>>1;(i=qry(rt[C[1][p]]))<k?r=mid,k-=i,p=C[0][p]:(l=mid+1,p=C[1][p]);}printf("%d\n",lans=l);}}}
}

bzoj4605: 崂山白花蛇草水 //替罪羊式重构k-d树相关推荐

  1. bzoj4605 崂山白花蛇草水(动态开点线段树逃替罪羊重构K-D tree)

    首先我们发现它是一个三维的问题而且还强制在线 囧 我们可以考虑在外面来一个权值线段树,然后每次查询时在线段树二分即可,这样我们每个节点再套一棵K-D tree,用来查询有多少个点被框住了,然后因为是不 ...

  2. bzoj4605: 崂山白花蛇草水 权值线段树套KDtree

    bzoj4605: 崂山白花蛇草水 链接 bzoj loj 思路 强制在线,那就权值线段树套KDtree好了,没啥好讲的. KDtree要加平衡因子来重构.另外,那水真难喝. 错误 树套树一边写过了, ...

  3. [bzoj4605]崂山白花蛇草水 k-d tree 带替罪羊重构

    4605: 崂山白花蛇草水 Time Limit: 80 Sec  Memory Limit: 512 MB [Submit][Status][Discuss] Description 神犇Aleph ...

  4. 【线段树套KD树】[BZOJ4605]崂山白花蛇草水

    题目描述 Description 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实 力,他轻松地进了山东省省队,现在便是他履 ...

  5. BZOJ4605 : 崂山白花蛇草水

    外层维护权值线段树,内层维护kd-tree. 修改的时候只往右儿子里插入,不平衡的时候替罪羊式重构. 查询的时候在外层线段树上走,在内层kd-tree上查询矩形内点数即可. 时间复杂度$O(q\log ...

  6. bzoj4605 崂山白花蛇草水

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4605 [题解] 序列上的第k大我们可以用线段树内套一个能查询序列某些地方有多少数的数据结构来 ...

  7. 【BZOJ 4605】崂山白花蛇草水 替罪羊树套线段树

    外层是借鉴了kd-tree的替罪羊里层是线段树,插入就是正常插入+拍扁重建,查询的时候,我们就像树状数组套线段树一样操作在替罪羊中找到的线段树根节点,但是对于在kd-tree查找过程中遇到的单点,我们 ...

  8. [BZOJ4605]崂山白花蛇草水(主席树套kd-tree)

    题意:两种操作,在二维平面插入一个点及其权值,查询矩形区间第k大,强制在线. 之前考试考过一个矩形区间第k大的题..当时想了各种树套树套树,算了算复杂度都没有暴力快..后来憋了个kd-tree套主席树 ...

  9. bzoj4605 崂山白花蛇草水 权值线段树套kd树

    Description Q次操作,要求资瓷 在(x,y)处放一个数字x 查询(x1,y1)到(x2,y2)矩形内第k大 Solution 非常裸的权值线段树套kd树,为了保证复杂度可以定期重构也可以平 ...

最新文章

  1. Unity从头到尾无代码游戏制作学习教程
  2. 程序员跳槽全攻略——读书笔记
  3. 2020年PHP中级面试知识点及答案
  4. java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^
  5. OpenCV人脸检测与人脸识别
  6. JDK11的新特性:HTTP API和reactive streams
  7. Java网络爬虫实操(8)
  8. 使用Flowable.generate()生成可感知背压的流– RxJava常见问题解答
  9. Springboot环境下mybatis配置多数据源配置
  10. 华为机试HJ3:明明的随机数
  11. 高温保护_耐高温保护膜可以用在哪一方面?
  12. 18107 校赛排名
  13. [安全攻防进阶篇] 八.那些年的熊猫烧香及PE病毒行为机理分析
  14. c#json对象转数组_如何将Json数组转换为C#中的对象列表
  15. 51单片机按键控制数码管0~9_基于proteus的51单片机开发实例24-矩阵键盘(行列式键盘)...
  16. erlang 之简单的Diction实现
  17. 经典解读商业智能BI、大数据、数据中台三者关系
  18. Jarvis_Web 刷题记录_Bellone北洛
  19. ROS项目开发实战(三)——使用QT进行ROS的GUI界面设计(详细教程附代码!!!)
  20. TestNG入门教程-6-enabled和priority属性

热门文章

  1. be服务器未正常运行2.6.43,绝地求生be服务器未正常运行2.6.43怎么解决?
  2. Machine Learning with Graphs 之 Traditional Methods for Machine Learning in Graphs
  3. JAVA基础作业练习—自定义异常之模拟ATM
  4. 短视频美颜sdk为什么会爆火?
  5. C语言下划线开头的函数
  6. linux c写的一个航班查询的程序
  7. ffmpeg 3.2版本播放ts流正常,但是录制成为MP4的文件播放黑屏
  8. linux格式化TF卡工具
  9. Python是什么?一篇短文带你了解Python
  10. 基于ASP.NET通用后台管理系统模板