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\ ...
随机推荐
- mac os 禁止apache httpd自动启动(转)
mac os 禁止apache httpd自动启动 博客分类: 计算机使用 mac os不像linux有/etc/init.d/rc.local以及service的方式可以设置程序随机启动,而是使 ...
- 1.NSNotification|远程通知|本地通知|激光推送
1. 通知在iOS中应用非常广泛,合理的应用通知可以减少冗余代码,使我们的代码层次结构变了更加的清晰明了,利于程序猿读写.它主要分为不可见通知可见通知两种: 1.1 不可见通知,主要是有系统发出的 ...
- js 单例模式笔记
单例指一个类只有一个实例,这个类自行创建这个实例. 利用对象字面量直接生成一个单例: var singleton = { prop: 1, method: function(){ console.lo ...
- (译)关于async与await的FAQ
传送门:异步编程系列目录…… 环境:VS2012(尽管System.Threading.Tasks在.net4.0就引入,在.net4.5中为其增加了更丰富的API及性能提升,另外关键字”async” ...
- angularjs指令系统系列课程(1):目录
angularjs里面有一套十分强大的指令系统 比如内置指令:ng-app,ng-model,ng-repeat,ng-init,ng-bind等等 从现在开始我们讲解AngularJS自定义指令, ...
- 慕课网__CSS__line height
- maven工程使用spring-boot-devtools进行热部署,更改代码避免重启web容器
spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去.相关Blog: 点击打开链接 原理是在发现代码有更改之后,重新启动应用 ...
- Python之路 day2 按行读文件
#1. 最基本的读文件方法: # File: readline-example-1.py file = open("sample.txt") while 1: line = fil ...
- Gamemaker Studio运行时弹出打开窗口导致无法启动的错误
Desc 初次使用遇到一个问题,点击Run的时候并没有运行当前工程而是弹出一个打开窗体 Steam里面相同问题描述:Compile error 后续才得知是要选择data.win,但是这个文件根本就没 ...
- display:inline、block、inline-block的区别
display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度不设是它的容器的100%,除非设定一个宽度 <div& ...