#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#define M 200009
#define inf 100000000
#define ll long long
using namespace std;
struct A
{
int l,r,mn[],mx[],d[],v;
ll sum;
}a[M],b,p[M];
int n,m,root,N,tot;
ll lans;
void updata(int k)
{
A l1=a[a[k].l],r1=a[a[k].r];
for(int i=;i<;i++)
{
a[k].mn[i]=a[k].mx[i]=a[k].d[i];
if(a[k].l)
a[k].mn[i]=min(a[k].mn[i],l1.mn[i]),a[k].mx[i]=max(a[k].mx[i],l1.mx[i]);
if(a[k].r)
a[k].mn[i]=min(a[k].mn[i],r1.mn[i]),a[k].mx[i]=max(a[k].mx[i],r1.mx[i]);
}
a[k].sum=l1.sum+r1.sum+(ll)a[k].v;
return;
}
bool cmp(A a1,A a2)
{
return a1.d[N]<a2.d[N];
}
int rebuild(int l1,int r1,int now)
{
N=now;
int mid=(l1+r1)>>;
nth_element(p+l1,p+mid,p+r1+,cmp);
a[mid]=p[mid];
if(l1<mid)
a[mid].l=rebuild(l1,mid-,now^);
else
a[mid].l=;
if(r1>mid)
a[mid].r=rebuild(mid+,r1,now^);
else
a[mid].r=;
updata(mid);
return mid;
}
void cha(int &k,A b,int now)
{
if(!k)
{
k=++m;
for(int i=;i<;i++)
a[k].mn[i]=a[k].mx[i]=a[k].d[i]=b.d[i];
a[k].l=a[k].r=;
}
if(a[k].d[]==b.d[]&&a[k].d[]==b.d[])
{
a[k].v+=b.v;
a[k].sum+=b.v;
return;
}
if(a[k].d[now]>b.d[now])
cha(a[k].l,b,now^);
else
cha(a[k].r,b,now^);
updata(k);
}
ll zhao(int k,int x1,int y1,int x2,int y2)
{
if(a[k].mn[]>=x1&&a[k].mn[]>=y1&&a[k].mx[]<=x2&&a[k].mx[]<=y2)
return a[k].sum;
if(a[k].mn[]>x2||a[k].mn[]>y2||a[k].mx[]<x1||a[k].mx[]<y1)
return ;
ll tmp=;
if(a[k].d[]>=x1&&a[k].d[]>=y1&&a[k].d[]<=x2&&a[k].d[]<=y2)
tmp+=a[k].v;
return tmp+zhao(a[k].l,x1,y1,x2,y2)+zhao(a[k].r,x1,y1,x2,y2);
} ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int main()
{
n=read();
tot=;
for(;;)
{
int a1,a2,a3,a4;
a1=read();
if(a1==)
return ;
a2=read()^lans;
a3=read()^lans;
a4=read()^lans;
if(a1==)
{
b.d[]=a2;
b.d[]=a3;
b.v=a4;
cha(root,b,);
if(m==tot)
{
for(int i=;i<=m;i++)
p[i]=a[i];
root=rebuild(,m,);
tot+=;
}
}
else
{
int a5;
a5=read()^lans;
printf("%lld\n",lans=zhao(root,a2,a3,a4,a5));
}
}
return ;
}

KDtree

bzoj 4066: 简单题的更多相关文章

  1. bzoj 4066: 简单题 kd-tree

    4066: 简单题 Time Limit: 50 Sec  Memory Limit: 20 MBSubmit: 234  Solved: 82[Submit][Status][Discuss] De ...

  2. BZOJ 4066 简单题(KD树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4066 [题目大意] 要求维护矩阵内格子加点和矩阵查询 [题解] 往KD树上加权值点,支 ...

  3. bzoj 4066 简单题——KDtree(带重构)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4066 带部分重构的KDtree.就是那个替罪羊树思想的. 写了对拍,调了半天,发现忘了 re ...

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

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

  5. BZOJ 4066 简单题 ——KD-Tree套替罪羊树

    [题目分析] 直接x,y二维轮番划分,暴力即可. 套上替罪羊,打碎重构,对于时间复杂度有了保证. 写起来好麻烦,重构的技巧很棒! [代码] #include <cstdio> #inclu ...

  6. BZOJ 2683: 简单题

    2683: 简单题 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 913  Solved: 379[Submit][Status][Discuss] ...

  7. BZOJ 3687: 简单题 bitset

    3687: 简单题 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 小呆开始研究集合论了,他 ...

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

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

  9. BZOJ 2683: 简单题(CDQ分治 + 树状数组)

    BZOJ2683: 简单题(CDQ分治 + 树状数组) 题意: 你有一个\(N*N\)的棋盘,每个格子内有一个整数,初始时的时候全部为\(0\),现在需要维护两种操作: 命令 参数限制 内容 \(1\ ...

随机推荐

  1. android dialog

    /** * @Title MenuTest.java * @package com.example.standardview * @since * @version 1.0.0 * @author V ...

  2. java full gc

    转自:http://blog.sina.com.cn/s/blog_7a351012010163a1.html

  3. rethinkdb的dataexplorer查询使用

    首先安装rethinkdb(只有linux和mac能够安装) $ sudo apt-get install rethinkdb 然后启动: $ rethinkdb 此时8080端口就可以访问本机的数据 ...

  4. 历尽磨难之PL/SQL链接Oracle数据库

    说起来都是泪啊,上司布置的任务需要远程连接Oracle数据库,说实话这又是我人生中的第一次.我听到以后觉得不是什么大问题,然而我错了..错的很厉害! 我搞了一天一夜才弄好,这里面原因有很多,大体来讲还 ...

  5. Python -- 数据加载、存储与文件格式

    标签(空格分隔): Python 读入读出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用Web API操作网络资源. 读写文本格式的数据 pandas提供了一 ...

  6. Python中的join()函数的用法

    函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下:    join():    连接字符串数组.将字符串.元组.列表中的元素以指定的字 ...

  7. java学习笔记----枚举测试题

    定义义一个交通灯枚举类,包含红灯.绿灯.黄灯,需要有获得下一个灯的方法,并实现红灯出现5秒之后变成绿灯,绿灯3秒之后变成黄灯,黄灯2秒之后变成红灯,如此循环 public class Test5 { ...

  8. JAVA 1.2(原生数据类型 Primitive Data Type)

    1. Java的数据类型分为2类 >> 原生数据类型(primitive data type) >> 引用数据类型(reference data type) 3. 常量和变量 ...

  9. HTML中使背景图片自适应浏览器大小

    由于<body>标签的图片不能够拉伸, 解决办法: 1.图片不够大,又background属性不能拉伸图片: 2.只能用个div,把其z-index值设为负,并使这个div大小为整个bod ...

  10. js做计算器

    js文档: function count(){ var a var txt1=document.getElementById("txt1").value;//获取第一个输入框的值 ...