题目链接

矩形查询可以拆成四个点的前缀和查询(树套树显然 但是空间不够)

每个操作表示为(t,x,y),t默认有序,对x分治,y用树状数组维护

初始赋值需要靠修改操作实现。

//119964kb	4380ms
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
#define lb(x) (x)&-(x)
const int N=5e5+5; int n,m,Ans[N];
struct Operation
{
int id,x,y,val;//id=0:Modify val=1/-1
Operation() {;}
Operation(int i,int X,int Y,int v): id(i),x(X),y(Y),val(v) {};
bool operator <(const Operation &a)const{
return x==a.x?id<a.id:x<a.x;
}
}q[N*5],tmp[N*5]; namespace BIT
{
int Max,t[10000005];
void Add(int p,int v){
while(p<=Max) t[p]+=v,p+=lb(p);
}
int Query(int p){
int res=0;
while(p) res+=t[p],p-=lb(p);
return res;
}
}
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
void CDQ(int l,int r)
{
if(l<r)
{
int m=l+r>>1; CDQ(l,m), CDQ(m+1,r);
int p1=l,p2=m+1,t=0;
while(p1<=m&&p2<=r)
{
if(q[p1]<q[p2])
{
if(!q[p1].id) BIT::Add(q[p1].y,1);
tmp[t++]=q[p1++];
}
else
{
if(q[p2].id) Ans[q[p2].id]+=q[p2].val*BIT::Query(q[p2].y);
tmp[t++]=q[p2++];
}
}
if(p1<=m)
{//特判下少计算些
for(int i=l; i<p1; ++i)
if(!q[i].id) BIT::Add(q[i].y,-1);
while(p1<=m) tmp[t++]=q[p1++];
}
else
{
while(p2<=r)
{
if(q[p2].id) Ans[q[p2].id]+=q[p2].val*BIT::Query(q[p2].y);
tmp[t++]=q[p2++];
}
for(int i=l; i<=m; ++i)
if(!q[i].id) BIT::Add(q[i].y,-1);
}
for(int i=0; i<t; ++i) q[l+i]=tmp[i];
// for(int i=l; i<=r; ++i) q[i]=tmp[i];//这样竟然会慢 玄学
}
} int main()
{
n=read(),m=read();
int qcnt=0,mx=0;
for(int x,y,i=1; i<=n; ++i)
x=read()+1,y=read()+1, mx=std::max(mx,y), q[++qcnt]=Operation(0,x,y,0);//将坐标改为[1,1e7+7]
for(int a,b,c,d,i=1; i<=m; ++i)
{
a=read()+1,b=read()+1,c=read()+1,d=read()+1;
mx=std::max(mx,std::max(b,d));//当然要和查询区域取max。。不然边上的怎么更新呢
q[++qcnt]=Operation(i,a-1,d,-1), q[++qcnt]=Operation(i,a-1,b-1,1);
q[++qcnt]=Operation(i,c,b-1,-1), q[++qcnt]=Operation(i,c,d,1);
}
BIT::Max=mx;
CDQ(1,qcnt);
for(int i=1; i<=m; ++i) printf("%d\n",Ans[i]); return 0;
}

BZOJ.1935.[SHOI2007]Tree园丁的烦恼(CDQ分治 三维偏序)的更多相关文章

  1. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼 +CDQ分治

    1935: [Shoi2007]Tree 园丁的烦恼 参考与学习:https://www.cnblogs.com/mlystdcall/p/6219421.html 题意 在一个二维平面中有n颗树,有 ...

  2. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼( 差分 + 离散化 + 树状数组 )

    假如矩阵范围小一点就可以直接用二维树状数组维护. 这道题,  差分答案, 然后一维排序, 另一维离散化然后树状数组维护就OK了. ----------------------------------- ...

  3. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼 [树状数组 离线 离散化]

    传送门 刚才我还在郁闷网上怎么没人用$CDQ$分治做 突然发现根本没有时间序.... #include<iostream> #include<cstdio> #include& ...

  4. bzoj 1935: [Shoi2007]Tree 园丁的烦恼

    Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个园丁道: ...

  5. BZOJ1935:[SHOI2007]Tree 园丁的烦恼(CDQ分治)

    Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个园丁道: ...

  6. bzoj1382 1935: [Shoi2007]Tree 园丁的烦恼

    1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec  Memory Limit: 357 MBSubmit: 1261  Solved: 578[Submit] ...

  7. 1935: [Shoi2007]Tree 园丁的烦恼

    1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec  Memory Limit: 357 MBSubmit: 648  Solved: 273[Submit][ ...

  8. BZOJ 1935 Tree 园丁的烦恼 CDQ分治/主席树

    CDQ分治版本 我们把询问拆成四个前缀和,也就是二维前缀和的表达式, 我们把所有操作放入一个序列中 操作1代表在x,y出现一个树 操作2代表加上在x,y内部树的个数 操作3代表减去在x,y内部树的个数 ...

  9. bzoj千题计划143:bzoj1935: [Shoi2007]Tree 园丁的烦恼

    http://www.lydsy.com/JudgeOnline/problem.php?id=1935 二维偏序问题 排序x,离散化树状数组维护y #include<cstdio> #i ...

随机推荐

  1. mysql系列七、mysql索引优化、搜索引擎选择

    一.建立适当的索引 说起提高数据库性能,索引是最物美价廉的东西了.不用加内存,不用改程序,不用调sql,只要执行个正确的'create index',查询速度就可能提高百倍千倍,这可真有诱惑力.可是天 ...

  2. oracle 远程导入导出(本地win)

    导出 exp hongtastock_account/hongtastock_account@192.168.1.22/orcl file=D:\hongta\hongtastock_account. ...

  3. 用zmq的pub/sub+flask实现异步通信的研究

    zmq_client监听端代码: #coding=utf8 ## client.py import zmq import sys import time import logging import o ...

  4. softlab对接Jenkins工程

    在Softlab上对接jenkins工程,必须先在自己的jenkins环境上配置好任务. 1.登陆到jenkins首页,比如http://10.179.175.53:8080/jenkins/ 2.点 ...

  5. @Html.Action()

    背景 在这里主要想谈下mvc,最初几年都是用的webform,作为一个资深傻瓜程序员多年,后来到处听说mvc,终于在某天下定决心实验下mvc,其实关键还是在于easyui,因为它的请求数据方式和mvc ...

  6. 004_Nginx 499错误的原因及解决方法

    一. 今天进行系统维护,发现了大量的499错误, 499错误 ngx_string(ngx_http_error_495_page), /* 495, https certificate error ...

  7. Spring MVC注解配置

    http://blog.csdn.net/eventys/article/details/8208808

  8. Ex 6_9 某个字符串处理语言提供了一个将字符串一分为二的基本操作..._第六次作业

    设字符串的长度为n,整型数组arr[0. . .n-1]的第一个数和最后一个数为开始点与结束点的位置,中间的数为拆分点的位置,设cost[i,j]为第i个分割点到第j个分割点的最小代价,两个分割点之间 ...

  9. 通过Cookie跳过登录验证码【限cookie不失效有用】

    验证码,相信每个写web自动化测试的同学来说,都是个头疼的事,怎么办呢? 方法还是有的,先说今天这种方式,通过cookie绕过登录验证码 思路: 需要你通过抓包工具抓到你登录的cookie 接下来开始 ...

  10. 用Kotlin破解Android版微信小游戏-跳一跳

    前言 微信又更新了,从更新日志上来看,似乎只是一次不痛不痒的小更新.不过,很快就有人发现,原来微信这次搞了个大动作——在小程序里加入了小游戏.今天也是朋友圈被刷爆的缘故. 看到网上 有人弄了一个破解版 ...