板子题。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cassert>
using namespace std;
#define ll long long
#define N 200010
#define inf 2000000000
#define lson tree[k].ch[0]
#define rson tree[k].ch[1]
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
int n,m,root,cnt,c,ans,t,tot,id[N];
const double alpha=0.75;
struct point
{int d[2],v;bool operator <(const point&a) const{return d[c]<a.d[c];}
}a[N];
struct KDTree{int ch[2],a[2][2],size,sum;point p;
}tree[N];
inline bool isin(point p,int a[2][2]){return p.d[0]>=a[0][0]&&p.d[0]<=a[0][1]&&p.d[1]>=a[1][0]&&p.d[1]<=a[1][1];}
inline bool isin(int a[2][2],int b[2][2]){return a[0][0]>=b[0][0]&&a[0][1]<=b[0][1]&&a[1][0]>=b[1][0]&&a[1][1]<=b[1][1];}
inline bool iscross(int a[2][2],int b[2][2]){return max(a[0][0],b[0][0])<=min(a[0][1],b[0][1])&&max(a[1][0],b[1][0])<=min(a[1][1],b[1][1]);}
void newnode(int k,point p)
{tree[k].size=1,tree[k].sum=p.v,tree[k].p=p;tree[k].a[0][0]=tree[k].a[0][1]=p.d[0],tree[k].a[1][0]=tree[k].a[1][1]=p.d[1];lson=rson=0;
}
void get(int k)
{if (lson) get(lson);t++,id[t]=k,a[t]=tree[k].p;if (rson) get(rson);
}
void build(int &k,int l,int r,int op)
{if (l>r) return;c=op;int mid=l+r>>1;nth_element(a+l,a+mid,a+r+1);newnode(k=id[++tot],a[mid]);for (int i=l;i<=r;i++)tree[k].a[0][0]=min(tree[k].a[0][0],a[i].d[0]),tree[k].a[0][1]=max(tree[k].a[0][1],a[i].d[0]),tree[k].a[1][0]=min(tree[k].a[1][0],a[i].d[1]),tree[k].a[1][1]=max(tree[k].a[1][1],a[i].d[1]);build(lson,l,mid-1,op^1),build(rson,mid+1,r,op^1);tree[k].size+=tree[lson].size,tree[k].size+=tree[rson].size,tree[k].sum+=tree[lson].sum,tree[k].sum+=tree[rson].sum;
}
void rebuild(int &k,int op)
{t=0;get(k);tot=0;build(k,1,t,op);
}
void ins(int &k,point p,int op)
{if (!k) {newnode(k=++cnt,p);return;}if (max(tree[lson].size,tree[rson].size)>tree[k].size*alpha) rebuild(k,op);tree[k].size++;tree[k].sum+=p.v;tree[k].a[0][0]=min(tree[k].a[0][0],p.d[0]),tree[k].a[0][1]=max(tree[k].a[0][1],p.d[0]);tree[k].a[1][0]=min(tree[k].a[1][0],p.d[1]),tree[k].a[1][1]=max(tree[k].a[1][1],p.d[1]);if (tree[k].a[op][1]<=p.d[0]) ins(lson,p,op^1);else ins(rson,p,op^1);
}
int query(int k,int a[2][2])
{if (!k) return 0;if (isin(tree[k].a,a)) return tree[k].sum;return (isin(tree[k].p,a)?tree[k].p.v:0)+(iscross(tree[lson].a,a)?query(lson,a):0)+(iscross(tree[rson].a,a)?query(rson,a):0);
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("bzoj4066.in","r",stdin);freopen("bzoj4066.out","w",stdout);const char LL[]="%I64d\n";
#elseconst char LL[]="%lld\n";
#endifread();int op=read();while (op<3){if (op==1){int x=read()^ans,y=read()^ans,z=read()^ans;ins(root,(point){{x,y},z},0);}else{int a[2][2];a[0][0]=read()^ans,a[1][0]=read()^ans,a[0][1]=read()^ans,a[1][1]=read()^ans;printf("%d\n",ans=query(root,a));}op=read();}return 0;
}

转载于:https://www.cnblogs.com/Gloid/p/10161408.html

BZOJ4066 简单题(KD-Tree)相关推荐

  1. BZOJ4066:简单题(K-D Tree)

    Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x,y<=N,A是正整数 将格 ...

  2. BZOJ4066: 简单题

    BZOJ4066: 简单题 Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x,y& ...

  3. k-d tree算法的研究

    By RaySaint 2011/10/12 动机 先前写了一篇文章<SIFT算法研究>讲了讲SIFT特征具体是如何检测和描述的,其中也提到了SIFT常见的一个用途就是物体识别,物体识别的 ...

  4. BZOJ 3489: A simple rmq problem(K-D Tree)

    Time Limit: 40 Sec  Memory Limit: 512 MB Submit: 2579  Solved: 888 [Submit][Status][Discuss] Descrip ...

  5. BZOJ1941:[SDOI2010]Hide and Seek(K-D Tree)

    Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏- ...

  6. K-D Tree学习笔记

    引入 K-D Tree 是一种处理高维空间的数据结构. 支持O(nk−1k)O(n^{\frac {k-1}k})O(nkk−1​)查询给定超矩形内的点的信息, kkk 为维数. 可以用替罪羊树的思想 ...

  7. [学习笔记] 乱世之神杀疯了 —— K-D tree

    文章目录 K-D tree 建树 合并 插入 删除 查询(估价函数) 旋转坐标系 题目练习 [SDOI2012]最近最远点对 [Violet]天使玩偶/SJY摆棋子 [CQOI2016]K远点对 [国 ...

  8. HDU2966 In case of failure(浅谈k-d tree)

    嘟嘟嘟 题意:给定\(n\)个二维平面上的点\((x_i, y_i)\),求离每一个点最近的点得距离的平方.(\(n \leqslant 1e5\)) 这就是k-d tree入门题了. k-d tre ...

  9. PCL :K-d tree 2 结构理解

    K-d tree 基础思路:(先看之前的KNN思想,更容易理解) 导语:kd 树是一种二叉树数据结构,可以用来进行高效的 kNN 计算.kd 树算法偏于复杂,本篇将先介绍以二叉树的形式来记录和索引空间 ...

  10. PCL:k-d tree 1 讲解

    1.简介 kd-tree简称k维树,是一种空间划分的数据结构.常被用于高维空间中的搜索,比如范围搜索和最近邻搜索.kd-tree是二进制空间划分树的一种特殊情况.(在激光雷达SLAM中,一般使用的是三 ...

最新文章

  1. oc35--自定义构造方法
  2. 线程池设计中的惊群问题
  3. [CTO札记]从生活来看‘服务心态’
  4. php查询MySQL结果转化为数组_PHP如何将SQL查询结果转为多维数组,并按查询行输出...
  5. ArcGIS Maritime 发布海图切片服务详解
  6. android 获取声音资源,Android从视频中提取出音频
  7. 读赵凯华之《新概念物理教程.量子物理》
  8. IDEA中输入法无法切换成中文解决方法
  9. 大数据分析:将大数据转化为巨额资金 第2章和第3章
  10. 服务器手机信息报警,广东肇庆110全面开通手机短信报警服务
  11. 机器人论文(1)-下肢外骨骼的平衡与稳定性问题:系统综述
  12. csapp lab3 attack 《深入理解计算机系统》实验3攻击超详细0基础解析
  13. 万字长文总结Android多进程,大厂直通车!
  14. c语言大学教程答案pdf,C++大学教程(第九版) 保罗·戴特尔(Paul Deitel)等著 完整中文pdf扫描版[197MB]...
  15. 有些事情,现在不想就晚了
  16. 韩版机泛泰A850framework去除漫游、本地化
  17. 百度地图-初步的地图创建和标识
  18. 小米8 twrp recovery_橙狐Recovery-一款另类功能丰富的第三方刷机工具-支持MIUI OTA
  19. 厦门大学821电子电路考研参考书目
  20. 博客摘录「 MACD金叉不绿选股公式」2023年5月28日

热门文章

  1. 2021-06-17 compareAndSet 比较交换 CAS
  2. latex acm-sigconf使用总结
  3. kubernetes Pod yaml解析注释
  4. java如何抽离_「小程序JAVA实战」 小程序抽离公用方法进行模块化(12)
  5. oracle删除schema下所有对象,清空Schema中所有对象的步骤
  6. 7-7 mmh学长的大数模板 (20分)
  7. 一文带你了解微信/支付宝支付的相关概念
  8. 适配器模式之享元模式
  9. 4)Thymeleaf th:each 循环迭代与 th:if、th:switch 条件判断
  10. Spring boot 自定义拦截器 获取 自定义注解 信息