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

【题目分析】

    直接x,y二维轮番划分,暴力即可。

    套上替罪羊,打碎重构,对于时间复杂度有了保证。

    写起来好麻烦,重构的技巧很棒!

【代码】

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;#define maxn 200005
#define inf 0x3f3f3f3f
#define lim 0.7
#define L t[o].c[0]
#define R t[o].c[1]
#define mid (l+r>>1)
#define F(i,j,k) for (int i=j;i<=k;++i)struct node{int d[2],c[2];int mx[2],mn[2],sum,v,siz,D;int& operator [] (int x){return d[x];}
}t[maxn],now;
int p[maxn];
int opt=0,D,rt=0,ans=0,tot=0,cnt;
inline bool cmp(int x,int y){return t[x][D]<t[y][D];}
void pushup(int k)
{for (int i=0;i<2;++i){t[k].mn[i]=min(t[t[k].c[0]].mn[i],min(t[t[k].c[1]].mn[i],t[k].mn[i]));t[k].mx[i]=max(t[t[k].c[0]].mx[i],max(t[t[k].c[1]].mx[i],t[k].mx[i]));}t[k].sum=t[t[k].c[0]].sum+t[t[k].c[1]].sum+t[k].v;t[k].siz=t[t[k].c[0]].siz+t[t[k].c[1]].siz+1;
}
inline int build(int l,int r,int dir){D=dir;nth_element(p+l,p+mid,p+r+1,cmp);int o=p[mid];t[o].D=dir;F(i,0,1) t[o].mn[i]=t[o].mx[i]=t[o][i];t[o].sum=t[o].v;L=l<mid ? build(l,mid-1,dir^1) : 0;R=mid<r ? build(mid+1,r,dir^1) : 0;pushup(o);return o;
}
inline void dfs(int o){if (!o) return;dfs(L);p[++cnt]=o;dfs(R);
}
inline void rebuild(int &o){cnt=0;dfs(o);o=build(1,cnt,t[o].D);
}void ins(int &o,int dir)
{if (!o){o=++tot;t[o]=now;for (int i=0;i<2;++i) t[o].mn[i]=t[o].mx[i]=t[o].d[i];t[o].siz=1;t[o].D=dir;t[o].sum=t[o].v;return ;}if (now.d[dir]<t[o].d[dir]){ins(t[o].c[0],dir^1);pushup(o);if ((double)t[t[o].c[0]].siz>(double)t[o].siz*lim) rebuild(o);}else{ins(t[o].c[1],dir^1);pushup(o);if ((double)t[t[o].c[1]].siz>(double)t[o].siz*lim) rebuild(o);}
}void print(int o){if (!o) return;printf("%d t[o].mn[0]=%d t[o].mn[1]=%d t[o].mx[0]=%d t[o].mx[1]=%d\n",o,t[o].mn[0],t[o].mn[1],t[o].mx[0],t[o].mx[1]);print(L);print(R);
}int query(int o,int x1,int y1,int x2,int y2)
{if (!o) return 0;if (t[o].mn[0]>=x1 && t[o].mn[1]>=y1 && t[o].mx[0]<=x2 && t[o].mx[1]<=y2)return t[o].sum;else{int ret=0;if (t[o].d[0]>=x1&&t[o].d[0]<=x2&&t[o].d[1]>=y1&&t[o].d[1]<=y2)ret+=t[o].v;if (t[t[o].c[0]].mn[0]>x2||t[t[o].c[0]].mx[0]<x1||t[t[o].c[0]].mn[1]>y2||t[t[o].c[0]].mx[1]<y1);else ret+=query(t[o].c[0],x1,y1,x2,y2);if (t[t[o].c[1]].mn[0]>x2||t[t[o].c[1]].mx[0]<x1||t[t[o].c[1]].mn[1]>y2||t[t[o].c[1]].mx[1]<y1);else ret+=query(t[o].c[1],x1,y1,x2,y2);return ret;}
}int main()
{for (int i=0;i<2;++i) t[rt].mx[i]=-inf,t[rt].mn[i]=inf;t[rt].siz=t[rt].sum=t[rt].v=0; scanf("%*d");while (scanf("%d",&opt)!=EOF&&opt!=3){if (opt==1){scanf("%d%d%d",&now.d[0],&now.d[1],&now.v);now.d[0]^=ans; now.d[1]^=ans; now.v^=ans;ins(rt,1);}else{int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);x1^=ans;y1^=ans;x2^=ans;y2^=ans;printf("%d\n",ans=query(rt,x1,y1,x2,y2));}}
}

  

转载于:https://www.cnblogs.com/SfailSth/p/6231276.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HTML5初探之绘制图像(上)】看我canvas元素引领下一代web页面

弧度一块可能有误&#xff0c;需要再研究 导航 【初探HTML5之使用新标签布局】用html5布局我的博客页&#xff01; 【HTML5初探之form标签】解放表单验证、增加文件上传、集成拖放 【HTML5初探之绘制图像&#xff08;上&#xff09;】看我canvas元素引领下一代web页面 【HTML5初…

或运算

逻辑或 ||int i, j, k;i 0x15;j 0x41;k i || j;反汇编代码如下:MOV DWORD PTR SS:[EBP-4], 15MOV DWORD PTR SS:[EBP-C], 41CMP DWORD PTR SS:[EBP-4], 0JNZ SHORT asm_OR.00401029CMP DWORD PTR SS:[EBP-C], 0JNZ SHORT asm_OR.00401029MOV DWORD PTR SS:[EBP-10], 0JMP SH…

构造方法的调用顺序和成员变量的初始化时机以及动态绑定

构造方法的调用顺序&#xff1a;子类构造器中&#xff0c;JVM会自动的先调用父类的构造方法&#xff0c;然后再执行子类构造方法。在JVM自动调用父类构造方法的时候&#xff0c;会完成父类中拥有的成员变量的值的初始化操作&#xff0c;此时子类的成员变量并未初始化&#xff0…

Python interview_python

https://github.com/taizilongxu/interview_python 1 Python的函数参数传递 strings, tuples, 和numbers是不可更改的对象&#xff0c;而list,dict等则是可以修改的对象 2 Python中的元类(metaclass) 3 staticmethod和classmethod python 三个方法&#xff0c;静态方法&#xf…

突然不能 ip访问服务器文件夹,用友U8 工作站连接不到服务器,ping IP及服务器名都正常,访问服务器共享文件夹也正常...

用友U8 U8存货采购入库单存货现存量与存货核算中的明细帐数量不符用友U8 U8存货采购入库单存货现存量与存货核算中的明细帐数量不符问题原因:错误原因见下面解决方案中的分析。解决方法:在查询存货明细帐和现存量09仓库存货510241数量为123&#xff0c;但在添采购入库单红字时却…

rocketmq 消息 自定义_RocketMQ消息轨迹-设计篇

RocketMQ 消息轨迹主要包含两篇文章&#xff1a;设计篇与源码分析篇&#xff0c;本节将详细介绍RocketMQ消息轨迹-设计相关。RocketMQ消息轨迹&#xff0c;主要跟踪消息发送、消息消费的轨迹&#xff0c;即详细记录消息各个处理环节的日志&#xff0c;从设计上至少需要解决如下…

再次献给那些心软的人!!!

上次那篇日志朋友看了评论说&#xff1a;别太悲观……为那些坏人成为坏人才是最不值得的&#xff01;而且好人说要当坏人就只是说说而已&#xff0c;真碰到啥事&#xff0c;依旧会傻傻的帮……没错&#xff0c;我还是傻傻的帮了&#xff0c;最初会表现出一点不乐意&#xff0c;…

手机做服务器性能咋样,服务器性能不足 怎样才能逼出最强状态

而且&#xff0c;服务器的节能不仅仅意味着节省了电费&#xff0c;其后续的散热降温等工作都可以得到更好的节约。同时&#xff0c;服务器的在长时间工作的情况下&#xff0c;保持较低温度有利于降低其承载负荷&#xff0c;最大限度发挥其能力&#xff0c;保障服务器工作运行的…

ASP.NET跨页面传值技巧总结

1. 使用QueryString变量 QueryString是一种非常简单的传值方式&#xff0c;他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时&#xff0c;可以使用这个方法。但是对于传递数组或对象的话&#xff0c;就不能用这个方法了。下面…

RTMP协议中文翻译(首发)(转)

Adobe公司的实时消息传输协议 摘要 此备忘录描述了 Adobe公司的实时消息传输协议(RTMP)&#xff0c;此协议从属于应用层&#xff0c;被设计用来在适合的传输协议&#xff08;如TCP&#xff09;上复用和打包多媒体传输流&#xff08;如音频、视频和互动内容&#xff09;。 目录 …

关卡 动画 蓝图 运行_UE4入门之路(基础蓝图篇):蓝图的制作

蓝图系统简介蓝图系统是UE4中十分有代表性的一个特点&#xff0c;所谓蓝图就是一种可视化的脚本。该系统非常灵活且非常强大&#xff0c;因为它为设计人员提供了一般仅供程序员使用的所有概念及工具。 程序员能够很方便的创建一个基础系统&#xff0c;并交给策划进一步在蓝图中…

overfitting(过度拟合)的概念

来自&#xff1a;http://blog.csdn.net/fengzhe0411/article/details/7165549 最近几天在看模式识别方面的资料&#xff0c;多次遇到“overfitting”这个概念&#xff0c;最终觉得以下解释比较容易接受&#xff0c;就拿出来分享下。 overfittingt是这样一种现象&#xff1a;一个…

虚拟串口服务器zenetmanager,Avocent服务器/串口管理 KVM

MergePoint Unity交换机在单个设备中结合了 KVM over IP和串行控制台管理技术。这项独特的结合为IT管理员提供了用于访问和控制服务器、网络设备及其他数据中心和分支办公室设备的完整远程管理解决方案。MergePoint Unity交换机直接与物理KVM、USB和串行端口进行安全的远程带外…

KAFKA分布式消息系统

Kafka[1]是linkedin用于日志处理的分布式消息队列&#xff0c;linkedin的日志数据容量大&#xff0c;但对可靠性要求不高&#xff0c;其日志数据主要包括用户行为&#xff08;登录、浏览、点击、分享、喜欢&#xff09;以及系统运行日志&#xff08;CPU、内存、磁盘、网络、系统…

jar打包 剔除第三方依赖以及它的依赖_面试官:为什么Spring Boot的jar可以直接运行?...

来源&#xff1a;Gormats Notesfangjian0423.github.io/2017/05/31/springboot-executable-jar/Spring Boot Loader抽象的一些类JarLauncher的执行过程关于自定义的类加载器LaunchedURLClassLoaderSpring Boot Loader的作用SpringBoot提供了一个插件spring-boot-maven-plugin用…

CQRS架构图

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/darkness/blog/814243

SQLite中不支持的sql语法

今天很自然的在写Sql语句的时候用了Top&#xff0c;一开始没发现问题&#xff0c;因为我从数据库读出的值正好是0&#xff0c;而我习惯变量定义的时候也都赋值0&#xff0c;可是到我不要0的时候我就发现问题了。后来才知道&#xff0c;可爱的小sqlite竟然有不支持的sql语法。 看…

Analyzer普通用户登录不了[从网络访问此计算机]

问题&#xff1a; 最近客户诺奇反映说Analyzer普通用户登录不了&#xff0c;但是发现管理员又可以登录&#xff0c;几经周折发现原来是系统的本地安全策略设置了不让远程使用本地账户密码登录系统导致。解决方案&#xff1a; 修改本地安全策略的“从远程访问此计算机”中的用户…

金蝶系统服务器要求,金蝶服务器安装及其相关要求.doc

K/3WISE创新管理平台 V12.2标准部署环境说明目录1. 多语言部署规则21.1 客户端多语言部署规则21.2 中间层多语言部署规则31.3 数据库多语言部署规则31.4 人力资源、管理门户、CRM多语言部署规则41.5 Citrix远程接入多语言部署规则42. 多语言部署架构图52.1 简体中间层52.2 繁体…

源码 移植_FreeModbus移植总结

modbus是一项工业上经常用到的通讯协议&#xff0c;而freemodbus是一款开源的从机协议栈。关于它的移植网上已经有了很多的文章&#xff0c;但是大多都只是针对其中部分问题的表述。本文将会把自己在移植freemodbus过程中遇到的问题以及freemodbus的源码分析尽量表述清楚。&…