bzoj 4066: 简单题
#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: 简单题的更多相关文章
- bzoj 4066: 简单题 kd-tree
4066: 简单题 Time Limit: 50 Sec Memory Limit: 20 MBSubmit: 234 Solved: 82[Submit][Status][Discuss] De ...
- BZOJ 4066 简单题(KD树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4066 [题目大意] 要求维护矩阵内格子加点和矩阵查询 [题解] 往KD树上加权值点,支 ...
- bzoj 4066 简单题——KDtree(带重构)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4066 带部分重构的KDtree.就是那个替罪羊树思想的. 写了对拍,调了半天,发现忘了 re ...
- bzoj 4066: 简单题 K-D树
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4066 题解 我们把每次的修改操作都当作二维平面上多了一个权值点 对于每组询问可以看做求一 ...
- BZOJ 4066 简单题 ——KD-Tree套替罪羊树
[题目分析] 直接x,y二维轮番划分,暴力即可. 套上替罪羊,打碎重构,对于时间复杂度有了保证. 写起来好麻烦,重构的技巧很棒! [代码] #include <cstdio> #inclu ...
- BZOJ 2683: 简单题
2683: 简单题 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 913 Solved: 379[Submit][Status][Discuss] ...
- BZOJ 3687: 简单题 bitset
3687: 简单题 Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 小呆开始研究集合论了,他 ...
- bzoj 4066 & bzoj 2683 简单题 —— K-D树(含重构)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4066 https://www.lydsy.com/JudgeOnline/problem.p ...
- BZOJ 2683: 简单题(CDQ分治 + 树状数组)
BZOJ2683: 简单题(CDQ分治 + 树状数组) 题意: 你有一个\(N*N\)的棋盘,每个格子内有一个整数,初始时的时候全部为\(0\),现在需要维护两种操作: 命令 参数限制 内容 \(1\ ...
随机推荐
- android 命名 数组 所有国家 String[] COUNTRIES
static final String[] COUNTRIES = new String[] { "Afghanistan", "Albania", " ...
- Service服务
Android多线程: 定义线程的2种方式: 1.继承Thread类,重写run()方法,new一个实例,用start()方法启动:new MyThread().start(); 2.实现Runnab ...
- json接口
http://api.rottentomatoes.com/api/public/v1.0/lists/movies/in_theaters.json?apikey=7waqfqbprs7pajbz2 ...
- Javascript学习笔记:闭包题解(1)
代码: function createFunctions(){ var result=[]; for(var i=0;i<10;i++){ result[i]=function(){ retur ...
- 求空间内两条直线的最近距离以及最近点的坐标(C++)
关键词:空间几何 用途:总有地方会用到吧 文章类型:C++函数展示 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-19 @Lab: CvLab20 ...
- JS中parseInt()、Numer()深度解析
JS中字符串转换为数字有两种方式: 1.parseInt函数 定义:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/ ...
- Best 3D Modeling software under Ubuntu
Blender Blender is the best free and open source 3D modelling program out there by a long shot! The ...
- 原来cursor:可以这样改变鼠标样式
前言:今天看百度的一个layui前端框架的时候,看到一个禁用图标的样式,鼠标移上去会变成一个自定义的图片样式,就在想难道cursor也可以自定义图片路径?!之前一直没有使用过. 使用了一下之后,遇到很 ...
- (原创)RS232串口信号定义
好久没用动硬件了,串口更是好久没用用了. 曾经接口信号记得很清楚,久了,忘了. 今天,重新回顾,笔记记下. DB9接口分公头和母头,公头即插针头,电脑机箱上多少公头.母头即插孔座. 合理的硬件设计均以 ...
- font-weight -- 定义字体的粗细
font-weight -- 定义字体的粗细 取值: normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 70 ...