题目大意:

一些点,每次查询一个矩形内有多少个点

思路:

因为空间太大

所以不能用什么二维树状数组

需要把这些点和所有查询的矩阵的左下和右上离线下来

先离散化

然后每个子矩阵像二维前缀和那样查询

按照x升序加入点,对于矩阵的点查询

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define inf 2139062143
#define ll long long
#define MAXN 500100
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,c[MAXN*],vis[MAXN],m,cnt,k,ans[MAXN];
struct data
{
int x,y,pos,yy;
}g[MAXN*],a[MAXN*];
bool cmp1(data a,data b)
{
if(a.x<b.x) return ;
if(a.x>b.x) return ;
if(a.x==b.x)
{
if(a.pos<=n&&b.pos>n) return ;
if(a.pos>n&&b.pos<=n) return ;
return a.y<b.y;
}
}
bool cmp2(data a,data b) {return a.y<b.y||(a.y==b.y&&a.x<b.x);}
int lowbit(int x) {return x&(-x);}
void add(int x) {for(int i=x;i<=k;i+=lowbit(i)) c[i]++;}
int query(int x) {int res=;for(int i=x;i;i-=lowbit(i)) res+=c[i];return res;}
int main()
{
n=read(),m=read();
for(int i=;i<=n;i++)
a[i].pos=g[i].pos=i,g[i].x=read(),g[i].y=read();
for(int i=n+;i<=n+*m;i++)
a[i].pos=g[i].pos=i,g[i].x=read(),g[i].y=read();
sort(g+,g+n+*m+,cmp2);
g[].x=g[].y=-,cnt=;
//离散化---------------------------------------------------------
for(int i=;i<=n+*m;i++)
{
if(g[i].y!=g[i-].y) a[g[i].pos].y=++cnt;
else a[g[i].pos].y=cnt;
}
k=cnt+;sort(g+,g+n+*m+,cmp1);cnt=;
for(int i=;i<=n+*m;i++)
{
if(g[i].x!=g[i-].x) a[g[i].pos].x=++cnt;
else a[g[i].pos].x=cnt;
}
//对于每个子矩阵的点需要记录另一个点的纵坐标---------------------
for(int i=;i<=*m;i+=)
{--a[i+n].x,a[i+n].yy=a[i++n].y,a[i++n].yy=a[i+n].y;}
sort(a+,a+n+m*+,cmp1);
for(int i=;i<=n+*m;i++)
{
if(a[i].pos>n)//如果是查询
{
int h=(a[i].pos-n+)>>;vis[h]++;
if(vis[h]==) ans[h]=query(a[i].y-)-query(a[i].yy);//左下角的点
if(vis[h]==) ans[h]+=query(a[i].y)-query(a[i].yy-);//右上角的点
}
else add(a[i].y);//不是查询的点
}
for(int i=;i<=m;i++) printf("%d\n",ans[i]);
}

bzoj 1935 Tree 园丁的烦恼的更多相关文章

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

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

  2. BZOJ 1935 Tree 园丁的烦恼 (树状数组)

    题意:中文题. 析:按x排序,然后用树状数组维护 y 即可. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000" ...

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

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

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

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

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

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

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

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

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

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

  8. [bzoj1935][shoi2007]Tree 园丁的烦恼(树状数组+离线)

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

  9. BZOJ1935: [Shoi2007]Tree 园丁的烦恼

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

随机推荐

  1. CAD从二制流数据中加载图形(com接口Delphi语言)

    主要用到函数说明: _DMxDrawX::ReadBinStream 从二制流数据中加载图形,详细说明如下: 参数 说明 VARIANT varBinArray 二制流数据,是个byte数组 BSTR ...

  2. Java基础(四)--接口和抽象类

    接口和抽象类能够体现OOP的抽象,而接口和抽象类也是日常开发中经常用到的 抽象方法: 抽象方法就是被abstract修饰的方法,只有声明,没有实现,也就是没有方法体 public abstract v ...

  3. day02python

    ''' 列表 定义:在[]内,可以存放多个任意类型的值,并以逗号隔开. 一般用于存放学生的爱好,课堂的周期等等... ''' students=['钱垚','李小龙','张全蛋','赵铁柱'] pri ...

  4. java jvm eclipse 性能调优

    低配配置 -Dfile.encoding=UTF-8-Xms960m-Xmx960m-Xmn384m-Xverify:none-Xss256k-XX:MaxTenuringThreshold=2-XX ...

  5. sublime 使用笔记

    unbuntu安装sublime---------------------------------------------sudo add-apt-repository ppa:webupd8team ...

  6. LINUX-YUM 软件包升级器 - (Fedora, RedHat及类似系统)

    yum install package_name 下载并安装一个rpm包 yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关 ...

  7. 类中的普通方法伪装成属性 @property

    class P: def __init__(self,name,age): self.name=name if type(age) is int: self.__age=age else: print ...

  8. MaxScale初探

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mrcto.blog.51cto.com/1923168/1437287 内容预览 ...

  9. MongoDB增加用户、删除用户、修改用户读写权限及只读权限(注:转载于http://www.2cto.com/database/201203/125025.html)

    MongoDB  增加用户 删除用户  修改用户  读写权限 只读权限,   MongoDB用户权限分配的操作是针对某个库来说的.--这句话很重要.   1. 进入ljc 数据库:       use ...

  10. Codeforces Round #260 (Div. 2) D

    D. A Lot of Games time limit per test 1 second memory limit per test 256 megabytes input standard in ...