题目大意:

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

思路:

因为空间太大

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

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

先离散化

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

按照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控件安卓选择集

    在本示例中将使用构造选择集对被过滤对象进行过滤,该类封装了选择集及其处理函数,支持如下过滤条件. 参数类型 类型 RTDXF0 TEXT 文字 MTEXT 多行文字 CIRCLE 圆 ARC 圆弧 L ...

  2. Javascript 原型链与constructor

    Javascript中的constructor与prototype 在学习javascript面向对象编程的过程中, constructor和prototype一直让我觉得理解不透,慢慢的学习过程中记 ...

  3. Iframe用法精析

    String.prototype.match()中正则表达式的g标识存在的时候,函数不会捕获子表达式中的内容,不存在的时候可以. RegExp.prototype.exec()中g的存在只会影响,Re ...

  4. shell输出颜色、printf输出颜色

    1.echo开启彩色输出: -e 开启echo中的转义: \e或者\033来输出Esc颜色: 恢复默认颜色为:\e[0m; 命令格式: echo -e "\e[字背景颜色:文字颜色m字符串\ ...

  5. Trees on the level (二叉链表树)

    紫书:P150 uva122 Background Trees are fundamental in many branches of computer science. Current state- ...

  6. [luoguP1433] 吃奶酪(DP || Dfs)

    传送门 深搜加剪纸可A(O(玄学) 1274ms) ——代码 #include <cmath> #include <cstdio> #include <iostream& ...

  7. Hihocoder 1337 (splay)

    Problem 平衡树 SBT 题目大意 维护一个序列,支持两种操作. 操作一:插入一个数. 操作二:询问第k小的数. 解题分析 ~~刷刷水题,再熟悉一下splay的基本操作. ps:哇咔咔,有连续四 ...

  8. - > 网络流(草地排水)

    网络流(Dinic(模板)) Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  9. 奇妙的滚动css+html

    <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title> ...

  10. 如何在eclipse中用maven编译

    在eclipse中用maven编译的方法: 在项目中的“pom.xml”文件上点击右键,在弹出的菜单中选择“Run AS”à“Maveninstall”来编译和生成项目.如下图所示: 在编译和生成过程 ...