博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[bzoj 4066]简单题
阅读量:6467 次
发布时间:2019-06-23

本文共 2372 字,大约阅读时间需要 7 分钟。

Description

两个操作,往一个格子里加一个数和求给定矩形的权值和,强制在线,操作数\(\leq 200000\)

Solution 

直接上KD-tree

为了保证树的形态较为优美

每加入\(10000\)个数后,对KD-tree进行重构

Code 

#include
#define ll long long#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b))#define reg registerinline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();} return x*f;}const int MN=2e5+5;int N,F;struct Point{ int d[2],mn[2],mx[2],l,r,sum,val; Point(){} Point(int x,int y){d[0]=x,d[1]=y;} Point(int x,int y,int x_,int y_){mn[0]=x,mn[1]=y;mx[0]=x_,mx[1]=y_;} int&operator[](int x){return d[x];} bool operator<(const Point&b)const{return d[F]
=mn[0]&&b.mx[0]<=mx[0]&&b.mn[1]>=mn[1]&&b.mx[1]<=mx[1];} inline bool out(const Point&b)const{return mn[0]>b.mx[0]||mx[0]
b.mx[1]||mx[1]
=mn[0]&&x<=mx[0]&&y>=mn[1]&&y<=mx[1];}}a[MN];struct KD_tree{ Point p[MN],T; void up(int x) { int l=p[x].l,r=p[x].r; for(int i=0;i<2;++i) { if(l) p[x].mn[i]=min(p[x].mn[i],p[l].mn[i]), p[x].mx[i]=max(p[x].mx[i],p[l].mx[i]); if(r) p[x].mn[i]=min(p[x].mn[i],p[r].mn[i]), p[x].mx[i]=max(p[x].mx[i],p[r].mx[i]); } p[x].sum=p[l].sum+p[r].sum+p[x].val; } int build(int l,int r,int th) { if(l>r)return 0;int mid=l+r>>1; F=th;std::nth_element(a+l,a+mid,a+r+1); p[mid]=a[mid]; p[mid].mn[0]=p[mid].mx[0]=a[mid][0]; p[mid].mn[1]=p[mid].mx[1]=a[mid][1]; p[mid].l=build(l,mid-1,th^1); p[mid].r=build(mid+1,r,th^1); up(mid); return mid; } int qry(int x) { if(!x)return 0; if(T.in(p[x])) return p[x].sum; if(T.out(p[x])) return 0; int ret=0; if(T.in(p[x].d[0],p[x].d[1])) ret+=p[x].val; ret+=qry(p[x].l)+qry(p[x].r); return ret; } void ins(int&x,int v,int th) { if(!x) { x=++N;p[x]=T; for(reg int i=0;i<2;++i) p[x].mn[i]=p[x].mx[i]=p[x][i]; p[x].sum=p[x].val=v;p[x].l=p[x].r=0;return; } if(p[x]==T){p[x].sum+=v;p[x].val+=v;return;} if(T[th]


Blog来自PaperCloud,未经允许,请勿转载,TKS!

转载于:https://www.cnblogs.com/PaperCloud/p/bzoj_4066.html

你可能感兴趣的文章
彻底解决adobe CS5安装过程中安装程序遇到错误(-1)。请重新启动计算机,然后重试。...
查看>>
Pull is not possible because you have unmerged files.
查看>>
POJ 2406 Power Strings
查看>>
使用WCF实现SOA面向服务编程—— 架构设计
查看>>
4、输出名称 Exported names
查看>>
paste工具
查看>>
Pre-echo(预回声),瞬态信号检测与TNS
查看>>
【转载】如何发送和接收 Windows Phone 的 Raw 通知
查看>>
WCF简要介绍
查看>>
NYOJ 97
查看>>
poj2378
查看>>
【译】SQL Server误区30日谈-Day12-TempDB的文件数和需要和CPU数目保持一致
查看>>
hive利器 自定义UDF+重编译hive
查看>>
不为技术而技术:大型网站架构演化解析
查看>>
Java文件清单列表
查看>>
js url传值中文乱码之解决之道
查看>>
Atitit.获取某个服务 网络邻居列表 解决方案
查看>>
Trusty TEE
查看>>
[LeetCode] Reverse String 翻转字符串
查看>>
学习iOS【3】数组、词典和集合
查看>>