bzoj4066: 简单题

链接

bzoj

思路

强制在线。k-dtree。

卡常啊。空间开1e6就T了。

代码

#include <bits/stdc++.h>
#define my_min(a,b) (a<b?a:a=b)
#define my_max(a,b) (a>b?a:a=b)
using namespace std;
const double alpha=0.75;
const int N=2e5+7;
int read() {
int x=0,f=1;
char s=getchar();
for(; s>'9'||s<'0'; s=getchar()) if(s=='-') f=-1;
for(; s>='0'&&s<='9'; s=getchar()) x=x*10+s-'0';
return x*f;
}
int WD,lastans;
struct point {
int x[2],v;
bool operator < (const point &b) const {
return x[WD]<b.x[WD];
}
} p[N];
struct node {
int ls,rs,mi[2],ma[2],sum,siz;
point a;
} e[N];
int rub[N],top,cnt;
int newnode() {
if(top) return rub[top--];
return ++cnt;
}
void update(int x,int y) {
my_min(e[x].mi[0],e[y].mi[0]);
my_min(e[x].mi[1],e[y].mi[1]);
my_max(e[x].ma[0],e[y].ma[0]);
my_max(e[x].ma[1],e[y].ma[1]);
}
void up(int u) {
int ls=e[u].ls,rs=e[u].rs;
e[u].mi[0]=e[u].ma[0]=e[u].a.x[0];
e[u].mi[1]=e[u].ma[1]=e[u].a.x[1];
e[u].sum=e[ls].sum+e[rs].sum+e[u].a.v;
e[u].siz=e[ls].siz+e[rs].siz+1;
if(ls) update(u,ls);
if(rs) update(u,rs);
}
int build(int l,int r,int wd) {
if(l>r) return 0;
int mid=(l+r)>>1;
WD=wd;
nth_element(p+l,p+mid,p+r+1);
int u=newnode();
e[u].a=p[mid];
e[u].ls=build(l,mid-1,wd^1);
e[u].rs=build(mid+1,r,wd^1);
up(u);
return u;
}
void pia(int u,int num) {
if(e[u].ls) pia(e[u].ls,num);
p[num+e[e[u].ls].siz+1]=e[u].a;
rub[++top]=u;
if(e[u].rs) pia(e[u].rs,num+e[e[u].ls].siz+1);
}
int check(int &u,int wd) {
if(alpha*e[u].siz<e[e[u].ls].siz||alpha*e[u].siz<e[e[u].rs].siz)
pia(u,0),u=build(1,e[u].siz,wd);
}
void insert(point a,int &rt,int wd) {
if(!rt) {
rt=newnode();
e[rt].a=a;
e[rt].ls=e[rt].rs=0;
up(rt);
return;
}
if(e[rt].a.x[wd]<a.x[wd]) insert(a,e[rt].rs,wd^1);
else insert(a,e[rt].ls,wd^1);
up(rt);
check(rt,wd);
}
int pd(node a,int x,int y,int X,int Y) {
if(x<=a.mi[0]&&a.ma[0]<=X&&y<=a.mi[1]&&a.ma[1]<=Y) return 1;
if(a.ma[0]<x||X<a.mi[0]) return 0;
if(a.ma[1]<y||Y<a.mi[1]) return 0;
return 2;
}
void query(int rt,int x,int y,int X,int Y) {
if(x<=e[rt].a.x[0]&&e[rt].a.x[0]<=X
&&y<=e[rt].a.x[1]&&e[rt].a.x[1]<=Y) lastans+=e[rt].a.v;
int ls=e[rt].ls,rs=e[rt].rs;
if(ls) {
int PD=pd(e[ls],x,y,X,Y);
if(PD==1) lastans+=e[ls].sum;
if(PD==2) query(ls,x,y,X,Y);
}
if(rs) {
int PD=pd(e[rs],x,y,X,Y);
if(PD==1) lastans+=e[rs].sum;
if(PD==2) query(rs,x,y,X,Y);
}
}
int main() {
int rt=0,n=read();
while(233) {
int opt=read();
if(opt==1) {
point a;
a.x[0]=read()^lastans,a.x[1]=read()^lastans,a.v=read()^lastans;
insert(a,rt,0);
} else if(opt==2) {
int x=read()^lastans,y=read()^lastans,X=read()^lastans,Y=read()^lastans;
lastans=0;
query(rt,x,y,X,Y);
printf("%d\n",lastans);
} else break;
}
return 0;
}

bzoj4066: 简单题 K-Dtree的更多相关文章

  1. [BZOJ2683][BZOJ4066]简单题

    [BZOJ2683][BZOJ4066]简单题 试题描述 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x ...

  2. Bzoj4066 简单题

    Time Limit: 50 Sec  Memory Limit: 20 MBSubmit: 2185  Solved: 581 Description 你有一个N*N的棋盘,每个格子内有一个整数,初 ...

  3. BZOJ4066 简单题(KD-Tree)

    板子题. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  4. BZOJ4066:简单题(K-D Tree)

    Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作:   命令 参数限制 内容 1 x y A 1<=x,y<=N,A是正整数 ...

  5. 【kd-tree】bzoj4066 简单题

    同p1176. #include<cstdio> #include<cmath> #include<algorithm> using namespace std; ...

  6. [bzoj4066/2683]简单题_KD-Tree

    简单题 bzoj-4066 题目大意:n*n的棋盘,开始为均为0,支持:单点加权值,查询矩阵权值和,强制在线. 注释:$1\le n\le 5\cdot 10^5$,$1\le m \le 2\cdo ...

  7. 【BZOJ4066】简单题(KD-Tree)

    [BZOJ4066]简单题(KD-Tree) 题面 BZOJ 题解 如果这题不卡空间,并且不强制在线的话 显然可以用\(CDQ\)分治做 但是它又卡空间又强制在线,于是我们欢快的来用\(KD-Tree ...

  8. 【BZOJ4066】简单题 KDtree

    [BZOJ4066]简单题 Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x,y& ...

  9. Bzoj2683 简单题

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1071  Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...

随机推荐

  1. LINUX 下.NET Core 微服务部署实战

    前言 最近一直在开发部署.也没有总结一下.从5月份开始出差到现在基本没有发过博客,哎,惭愧. 一直在弄微服务,后续会慢慢更新下面这个系列.欢迎各位大佬交流指点. 分布式理论专题 1..net core ...

  2. systemd - CentOS 7进程守护&监控

    需求: 运行环境为CentOS 7系统,我们开发了一个程序,需要在开机时启动它,当程序进程crash或者开机之后,守护进程立即拉起进程. 解决方案: 使用CentOS 7中的init进程systemd ...

  3. 2019 珍岛java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.珍岛等公司offer,岗位是Java后端开发,因为发展原因最终选择去了珍岛,入职一年时间了,也成为了面试官,之 ...

  4. CodeForces 1228F One Node is Gone

    洛谷题目页面传送门 & CodeForces题目页面传送门 给定一棵树\(T=(V,E),|V|=2^n-2,|E|=2^n-3\),输出所有的\(x\),使得存在一棵满二叉树\(T'\),将 ...

  5. 安装vivado 2016.1时出错

    在将vivado 2016.1安装到d:\ xilinx时,发生以下错误: 提取存档D时遇到 错误:\ Xilinx_Vivado_SDK_2016.1_0409_1 \ payload \ rdi_ ...

  6. 【转载】 C#中常见的泛型集合类有哪些

    在C#语言编程过程中,List集合类是最常见的泛型集合类,其实除了List集合,还有其他一些常用的泛型集合类,如字典类型Dictionary泛型集合类.先进先出的队列类型Queue泛型集合类.后进先出 ...

  7. elementUi vue el-radio 监听选中变化

    //change是radio-group标签的事件 <div> <el-radio-group v-model="radioSex" @change=" ...

  8. 为什么会有jQuery、Dojo、Ext、Prototype、YUI、Zepto这么多JS包?

    目前流行的JS框架很多Dojo .Scriptaculous .Prototype .yui-ext .Jquery .Mochikit.mootools .moo.fx 等.当然还有很多我都不熟悉的 ...

  9. php集成开发环境搭建三种方式

    三种方式都是一键搭建php开发环境 三种方式前提都是在linux下 wamp和phpstudy就不再用了 首先打造linux开发环境,通过vagrant+vbox实现本地文件同步到虚拟机上进行同步开发 ...

  10. Nginx 反向代理与负载均衡的配置

    已经很久没有写博了,因为最近学车加上各种问题一直没时间, 今天刚好想起有好多的东西还没来得及记录.回到正题: Nginx是一个非常强大的web轻量级服务器,许多大厂也用Nginx进行负载均衡和反向代理 ...