板子题。

#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<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),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[],v;
bool operator <(const point&a) const
{
return d[c]<a.d[c];
}
}a[N];
struct KDTree{int ch[],a[][],size,sum;point p;
}tree[N];
inline bool isin(point p,int a[][]){return p.d[]>=a[][]&&p.d[]<=a[][]&&p.d[]>=a[][]&&p.d[]<=a[][];}
inline bool isin(int a[][],int b[][]){return a[][]>=b[][]&&a[][]<=b[][]&&a[][]>=b[][]&&a[][]<=b[][];}
inline bool iscross(int a[][],int b[][]){return max(a[][],b[][])<=min(a[][],b[][])&&max(a[][],b[][])<=min(a[][],b[][]);}
void newnode(int k,point p)
{
tree[k].size=,tree[k].sum=p.v,tree[k].p=p;
tree[k].a[][]=tree[k].a[][]=p.d[],tree[k].a[][]=tree[k].a[][]=p.d[];
lson=rson=;
}
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>>;
nth_element(a+l,a+mid,a+r+);
newnode(k=id[++tot],a[mid]);
for (int i=l;i<=r;i++)
tree[k].a[][]=min(tree[k].a[][],a[i].d[]),tree[k].a[][]=max(tree[k].a[][],a[i].d[]),
tree[k].a[][]=min(tree[k].a[][],a[i].d[]),tree[k].a[][]=max(tree[k].a[][],a[i].d[]);
build(lson,l,mid-,op^),build(rson,mid+,r,op^);
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=;get(k);
tot=;build(k,,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[][]=min(tree[k].a[][],p.d[]),tree[k].a[][]=max(tree[k].a[][],p.d[]);
tree[k].a[][]=min(tree[k].a[][],p.d[]),tree[k].a[][]=max(tree[k].a[][],p.d[]);
if (tree[k].a[op][]<=p.d[]) ins(lson,p,op^);
else ins(rson,p,op^);
}
int query(int k,int a[][])
{
if (!k) return ;
if (isin(tree[k].a,a)) return tree[k].sum;
return (isin(tree[k].p,a)?tree[k].p.v:)+
(iscross(tree[lson].a,a)?query(lson,a):)+
(iscross(tree[rson].a,a)?query(rson,a):);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4066.in","r",stdin);
freopen("bzoj4066.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
read();int op=read();
while (op<)
{
if (op==)
{
int x=read()^ans,y=read()^ans,z=read()^ans;
ins(root,(point){{x,y},z},);
}
else
{
int a[][];a[][]=read()^ans,a[][]=read()^ans,a[][]=read()^ans,a[][]=read()^ans;
printf("%d\n",ans=query(root,a));
}
op=read();
}
return ;
}

BZOJ4066 简单题(KD-Tree)的更多相关文章

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

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

  2. P4148 简单题 k-d tree

    思路:\(k-d\ tree\) 提交:2次 错因:整棵树重构时的严重错误:没有维护父子关系(之前写的是假重构所以没有维护父子关系) 题解: 遇到一个新的点就插进去,如果之前出现过就把权值加上. 代码 ...

  3. [BZOJ2683][BZOJ4066]简单题

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

  4. bzoj4066: 简单题 K-Dtree

    bzoj4066: 简单题 链接 bzoj 思路 强制在线.k-dtree. 卡常啊.空间开1e6就T了. 代码 #include <bits/stdc++.h> #define my_m ...

  5. Bzoj4066 简单题

    Time Limit: 50 Sec  Memory Limit: 20 MBSubmit: 2185  Solved: 581 Description 你有一个N*N的棋盘,每个格子内有一个整数,初 ...

  6. bzoj 4066: 简单题 K-D树

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4066 题解 我们把每次的修改操作都当作二维平面上多了一个权值点 对于每组询问可以看做求一 ...

  7. 【kd-tree】bzoj4066 简单题

    同p1176. #include<cstdio> #include<cmath> #include<algorithm> using namespace std; ...

  8. bzoj 4066 & bzoj 2683 简单题 —— K-D树(含重构)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4066 https://www.lydsy.com/JudgeOnline/problem.p ...

  9. 初涉k-d tree

    听说k-d tree是一个骗分的好东西?(但是复杂度差评??? 还听说绍一的kdt常数特别小? KDT是什么 KDT的全称是k-degree tree,顾名思义,这是一种处理多维空间的数据结构. 例如 ...

随机推荐

  1. scapy学习笔记(1)

    转载请注明:小五义 http://www.cnblogs.com/xiaowuyi scapy是python写的一个功能强大的交互式数据包处理程序,可用来发送.嗅探.解析和伪造网络数据包,常常被用到网 ...

  2. day32

    今日内容 1.基于TCP协议(通信循环) 2.基于TCP协议(连接循环) 3.粘包问题 4.模拟SSH实现远程执行命令 服务器端 ################################### ...

  3. OS X 10.11无法安装cocoapods的解决办法

    前两天在给OS X 10.11 安装cocoapods时,命令行总是提示"Operation not permitted",我不管是用root用户安装还是查阅网上过去的资料都安装不 ...

  4. ASP.NET Response.Redirect 丢失 Session的问题(作废,仅供参考)

    以前在做ASP.NET开发时一直没注意到一个问题,就是广泛使用的Response.Redirect方法并不会将服务器端在Response中新增或修改的Cookie返回给客户端浏览器,而网站的Sessi ...

  5. jQuery对底部导航进行跳转并高亮显示

    这两天弄一个mui的底部菜单,有点费时了,尝试了用vue写,纯js写,还有根据mui的写,还是有些问题和麻烦.直到看了网上的一些例子,才想明白,之前一直是一种点击触发事件才高亮的思维去做,这个虽然可以 ...

  6. python利用beautifulSoup写爬虫

    python BeautifulSoup模块的安装 安装包下载地址:http://www.crummy.com/software/BeautifulSoup/#Download 文档:http://w ...

  7. 20155334 《网络攻防》 Exp9 Web安全基础

    <网络攻防> Exp9 Web安全基础 一.实验后回答问题 SQL注入攻击原理,如何防御: 原理: 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服 ...

  8. 复选框、单选框 jquery判断是否选中Demo

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="eachcheckbox.a ...

  9. 4556: [Tjoi2016&Heoi2016]字符串

    4556: [Tjoi2016&Heoi2016]字符串 链接 分析: 首先可以二分这个长度.此时需要判断是否存在一个以b结尾的前缀,满足与[c,d]的lcp大于等于mid. 如果我们把串翻转 ...

  10. C# Language Specification 5.0 (翻译)第一章 引言

    C#(念作 See Sharp)是一种简单.现代.面向对象并且类型安全的编程语言.C# 源于 C 语言家族,因此 C.C++ 和 Java 工程师们能迅速上手.ECMA 国际[1](ECMA Inte ...