板子题。

#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. COGNOS8培训之四(疑点解析)
  2. 源代码安装-非ROOT用户安装软件的方法
  3. 一文弄懂YOLO目标检测算法
  4. 前端构建工具gulpjs的使用介绍及技巧 (转)
  5. IDEA项目搭建七——使用Feign简化消费者端操作
  6. 不同服务器之间进行传输
  7. ios 各种锁的使用性能比较
  8. 数据:昨日BTC和ETH期货持仓均减少约三成,波动率创3月以来新高
  9. 1w存银行一年多少利息_一百万存银行一年利息多少?提前取出利息怎么算?
  10. 趣图:程序员的 5 个职业生涯阶段,你处于在哪个阶段呢
  11. 用户需求分析:背后隐藏的门槛
  12. LOL易游网络验证破解总结
  13. Swiper、vue-awesome-swiper中文文档
  14. 大数据开源框架环境配置(一)——安装VMware
  15. 十大著名黑客—— 凯文-米特尼克
  16. openwrt官方固件怎么中继网络
  17. addition过程 sgnb_5G-NSA接入流程分析及问题定位四步法
  18. 用完加速器国内的网址打不开了?
  19. 【英语学习工具】解说 LeHoCat 提供免费的 视频集制作工具 使用方法, 看视频学英语的制作工具, 制作英语教学课件的工具, 帮助自学英语(详细图文解说)
  20. 使用联想智能引擎的电脑,将会懂你的心思

热门文章

  1. java项目中的pom依赖在哪_java – 如何包含pom项目中的所有模块
  2. php mysql pod_php – 连接到同一pod中的MySQL容器
  3. 以太坊 交易 data字段 内容是什么
  4. java并发编程(1)--线程 可见性 volatile怎么用
  5. kubernetes视频教程笔记 (6)-kubernetes集群安装
  6. 基于Java的外卖订餐平台
  7. java memcached delete_Memcached删除/Delete数据
  8. 九、Linux 软件包安装
  9. java maven本地库导入本地包
  10. Nginx/Apache 对图片,css,js等优化,静态页面设置过期时间