bzoj 1935 Tree 园丁的烦恼
题目大意:
一些点,每次查询一个矩形内有多少个点
思路:
因为空间太大
所以不能用什么二维树状数组
需要把这些点和所有查询的矩阵的左下和右上离线下来
先离散化
然后每个子矩阵像二维前缀和那样查询
按照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 园丁的烦恼的更多相关文章
- BZOJ 1935 Tree 园丁的烦恼 CDQ分治/主席树
CDQ分治版本 我们把询问拆成四个前缀和,也就是二维前缀和的表达式, 我们把所有操作放入一个序列中 操作1代表在x,y出现一个树 操作2代表加上在x,y内部树的个数 操作3代表减去在x,y内部树的个数 ...
- BZOJ 1935 Tree 园丁的烦恼 (树状数组)
题意:中文题. 析:按x排序,然后用树状数组维护 y 即可. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000" ...
- BZOJ 1935: [Shoi2007]Tree 园丁的烦恼( 差分 + 离散化 + 树状数组 )
假如矩阵范围小一点就可以直接用二维树状数组维护. 这道题, 差分答案, 然后一维排序, 另一维离散化然后树状数组维护就OK了. ----------------------------------- ...
- BZOJ 1935: [Shoi2007]Tree 园丁的烦恼 +CDQ分治
1935: [Shoi2007]Tree 园丁的烦恼 参考与学习:https://www.cnblogs.com/mlystdcall/p/6219421.html 题意 在一个二维平面中有n颗树,有 ...
- bzoj1382 1935: [Shoi2007]Tree 园丁的烦恼
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 1261 Solved: 578[Submit] ...
- 1935: [Shoi2007]Tree 园丁的烦恼
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 648 Solved: 273[Submit][ ...
- bzoj千题计划143:bzoj1935: [Shoi2007]Tree 园丁的烦恼
http://www.lydsy.com/JudgeOnline/problem.php?id=1935 二维偏序问题 排序x,离散化树状数组维护y #include<cstdio> #i ...
- [bzoj1935][shoi2007]Tree 园丁的烦恼(树状数组+离线)
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 980 Solved: 450[Submit][ ...
- BZOJ1935: [Shoi2007]Tree 园丁的烦恼
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 552 Solved: 220[Submit][ ...
随机推荐
- CAD从二制流数据中加载图形(com接口Delphi语言)
主要用到函数说明: _DMxDrawX::ReadBinStream 从二制流数据中加载图形,详细说明如下: 参数 说明 VARIANT varBinArray 二制流数据,是个byte数组 BSTR ...
- Java基础(四)--接口和抽象类
接口和抽象类能够体现OOP的抽象,而接口和抽象类也是日常开发中经常用到的 抽象方法: 抽象方法就是被abstract修饰的方法,只有声明,没有实现,也就是没有方法体 public abstract v ...
- day02python
''' 列表 定义:在[]内,可以存放多个任意类型的值,并以逗号隔开. 一般用于存放学生的爱好,课堂的周期等等... ''' students=['钱垚','李小龙','张全蛋','赵铁柱'] pri ...
- java jvm eclipse 性能调优
低配配置 -Dfile.encoding=UTF-8-Xms960m-Xmx960m-Xmn384m-Xverify:none-Xss256k-XX:MaxTenuringThreshold=2-XX ...
- sublime 使用笔记
unbuntu安装sublime---------------------------------------------sudo add-apt-repository ppa:webupd8team ...
- LINUX-YUM 软件包升级器 - (Fedora, RedHat及类似系统)
yum install package_name 下载并安装一个rpm包 yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关 ...
- 类中的普通方法伪装成属性 @property
class P: def __init__(self,name,age): self.name=name if type(age) is int: self.__age=age else: print ...
- MaxScale初探
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mrcto.blog.51cto.com/1923168/1437287 内容预览 ...
- MongoDB增加用户、删除用户、修改用户读写权限及只读权限(注:转载于http://www.2cto.com/database/201203/125025.html)
MongoDB 增加用户 删除用户 修改用户 读写权限 只读权限, MongoDB用户权限分配的操作是针对某个库来说的.--这句话很重要. 1. 进入ljc 数据库: use ...
- 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 ...