题目大意:

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

思路:

因为空间太大

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

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

先离散化

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

按照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. nginx+keepalived+tomcat+memcache实现双VIP高可用及Session会话保持

    Nginx+Keepalived+Tomcat+Memcached 实现双VIP负载均衡及Session会话保持 IP 信息列表: 名称         IP                      ...

  2. js中=,==,===的区别

    =      赋值 ==    先判断类型,在判断值,可以做类型转换 ===  恒等判断

  3. linux 下mysql无法启动 mysql.sock

    在公司装的一键安装的lnmp环境,启动mysql时候发现mysql.sock不存在, 然后我进行查找  最后在  /usr/local/mysql/bin/mysql_safe  重新启动下 然后启动 ...

  4. Spring Boot 与ElasticSearch

    一.ElasticSearch 介绍 ​ 开源的 ElasticSearch 是目前全文搜索引擎的首选,它是一个分布式搜索服务,提供Restful API,它可以快速地存储.搜索和分析海量数据.底层基 ...

  5. ajax aspx调用webservice,返回json

    1,创建一个asp.net网站 2.创建一个student类 using System; using System.Collections.Generic; using System.Linq; us ...

  6. Don't make me think [读书笔记] [思维导图]

      <Don't make me think>第3版 内容:解析用户心理,在用户模式.扫描设计.导航设计.主页布局.可用性测试,提出了许多的独到观点及建议. 特色:语言轻松.实在.配有许多 ...

  7. 利用CMD 創建新文件的機種方法

    用 CMD 創建新文件 説明一下: 是在Windows的 CMD命令行模式下,或者在PowerShell命令行模式下創建新文件的機種方法. 創建空文件 cd.>a.txt cd.表示改变当前目录 ...

  8. 浅谈微信小程序对于房地产行业的影响

    前几日,我们曾经整理过一篇文章是关于微信小程序对于在线旅游业的影响的一些反思(浅谈微信小程序对OTA在线旅游市场的影响),近日由于生活工作的需要走访了一些房地产的住宅商品房,突然想到微信小程序对于房地 ...

  9. ganglia371 on suse11sp3

    参考https://my.oschina.net/duangr/blog/181585 1.确认依赖包是否已安装 确认命令:rpm -qa  如下为适合suse11sp3的依赖包版本 apr: lib ...

  10. Oracle 关于几个随机函数sys_guid、dbms_random.random、dbms_random.value(取随机的结果集)

    sys_guid():SYS_GUID (),是Oracle 8i 后提供的函数.SYS_GUID产生并返回一个全球唯一的标识符(原始值)由16个字节组成.更适合多个数据库数据集成时使用(--源自百度 ...