题目大意:

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

思路:

因为空间太大

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

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

先离散化

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

按照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. spring用来干什么,解决的问题

    // 1. 实体类 class User{ } //2. dao class  UserDao{ .. 访问db } //3. service class  UserService{ UserDao ...

  2. EF-基础用法

    一丶LINQ TO SQL 语法 基本格式:  from c in 表名 where 条件 select c 二丶LINQ简介 LINQ是Language Integrated Query的简称,它是 ...

  3. 【原】Mysql常用语句

    1.修改编码方式为UTF-8 ALTER   TABLE   表名  CHANGE  列名  新列名  VARCHAR(255)    CHARACTER  SET  utf8  COLLATE    ...

  4. react 中样式私有

    解决的问题,两个组件之间  有相同的class名,造成其中一个无法按预期的显示. import React, { Component } from 'react' import styles from ...

  5. python面向对象的特点,类定义等,私有属性、公有属性、成员属性

    引子:类的对象在内存中的表示def dog(name,dog_type): def bark(d): print(d,'wang wang wang ...') data = { 'name':nam ...

  6. LINUX-初始化一个文件系统

    mkfs /dev/hda1 在hda1分区创建一个文件系统 mke2fs /dev/hda1 在hda1分区创建一个linux ext2的文件系统 mke2fs -j /dev/hda1 在hda1 ...

  7. 洛谷 2966 2966 [USACO09DEC]牛收费路径Cow Toll Paths

    [题意概述] 给出一个图,点有正点权,边有正边权,通过两点的代价为两点间的最短路加上路径通过的点的点权最大值. 有M个询问,每次询问通过两点的代价. [题解] 先把点按照点权从小到大排序,然后按照这个 ...

  8. [bzoj1820][JSOI2010][Express Service 快递服务] (动态规划)

    Description 「飞奔」快递公司成立之后,已经分别与市内许多中小企业公司签订邮件收送服务契约.由于有些公司是在同一栋大楼内,所以「飞奔」公司收件的地点(收件点)最多只有m点 (1, 2, …, ...

  9. npm安装node包时怎么显示安装进度

    npm config set loglevel=http 打开这个你会看到所有的 HTTP 请求,除此之外如果还有 \ 长时间打转,那就是外部模块的编译过程,一个字:等. 具体地址可参考https:/ ...

  10. hdu 1185 状压dp 好题 (当前状态与上两行有关系)

    /* 状压dp 刚开始&写成&&看了好长时间T0T. 状态转移方程 dp[i][k][j]=Max(dp[i][k][j],dp[i-1][l][k]+num[i][j]);( ...