链接

bzoj

最好不要去luogu,数据太水

思路

一个询问转化成四个矩阵,求起点\((0,0)到(x,y)\)的矩阵

离线处理,离散化掉y,x不用离散。

一行一行的求,每次处理完一行之后下一行的贡献直接叠加到当前。

用lowbit统计

错误

离散化小心点,是y-1不是y

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7, maxn = 5e5 + 1;
int read() {
int x = 0, f = 1; char s = getchar();
for (; s > '9' || s < '0'; s = getchar()) if (s == '-') f = -1;
for (; s >= '0' && s <= '9'; s = getchar()) x = x * 10 + s - '0';
return x * f;
} int n, m, ans[N], x[N], y[N], X[N], Y[N];
pair<int, int> tree[N];
struct ask {
int id, q, x, y;
ask(int a = 0, int b = 0, int c = 0, int d = 0) {
id = a, q = b, x = c, y = d;
if (!x || !y) x = 0, y = 0;
}
bool operator < (const ask &b) const {
return x < b.x;
}
} Q[N<<2]; namespace BIT {
int sum[N];
inline int lowbit(int x) {
return x & -x;
}
void add(int x) {
for (int i = x; i <= maxn; i += lowbit(i))
sum[i]++;
}
int query(int x) {
int ans = 0;
for (int i = x; i >= 1; i -= lowbit(i))
ans += sum[i];
return ans;
}
}
int lsh[N<<3],len; int main() {
n = read(), m = read();
for (int i = 1; i <= n; ++i) {
tree[i].first = read() + 1, tree[i].second = read() + 1;
lsh[++len] = tree[i].second;
}
int nd = 0;
for (int i = 1, js = 0; i <= m; ++i) {
int x = read() + 1, y = read() + 1, X = read() + 1, Y = read() + 1;
lsh[++len] = Y, lsh[++len] = y - 1;
if (X and Y)
Q[++nd] = ask(i, 1, X, Y);
if (X and (y - 1))
Q[++nd] = ask(i, -1, X, y - 1);
if ((x - 1) and Y)
Q[++nd] = ask(i, -1, x - 1, Y);
if ((x - 1) and (y - 1))
Q[++nd] = ask(i, 1, x - 1, y - 1);
} sort(lsh + 1, lsh + 1 + len);
len = unique(lsh + 1, lsh + 1 + len) - lsh - 1;
for (int i = 1; i <= n; ++i)
tree[i].second = lower_bound(lsh + 1, lsh + 1 + len, tree[i].second) - lsh;
for (int i = 1; i <= nd; ++i) {
Q[i].y = lower_bound(lsh + 1, lsh + 1 + len, Q[i].y) - lsh;
} sort(tree + 1, tree + 1 + n);
sort(Q + 1, Q + 1 + nd); int js = 1;
for (int i = 1; i <= nd; ++i) {
while (tree[js].first <= Q[i].x && js <= n)
BIT::add(tree[js].second),++js;
ans[Q[i].id] += Q[i].q * BIT::query(Q[i].y);
} for (int i = 1; i <= m; ++i)
printf("%d\n", ans[i]); return 0;
}

bzoj1935: [Shoi2007]Tree 园丁的烦恼lowbit 离散化的更多相关文章

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

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

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

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

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

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

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

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

  5. [bzoj1935][Shoi2007]Tree 园丁的烦恼 _树状数组

    Tree 园丁的烦恼 bzoj-1935 Shoi-2007 题目大意:给定平面上的$n$个点,$m$次查询矩形点个数. 注释:$1\le n,m\le 5\cdot 10^5$. 想法:静态二维数点 ...

  6. 初涉二维数点问题&&bzoj1935: [Shoi2007]Tree 园丁的烦恼

    离线好评 Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个 ...

  7. [BZOJ1935][SHOI2007]Tree 园丁的烦恼(离线+树状数组)

    题意 给出第一象限的n个点,有m次询问,每次询问一个矩形中的点的个数.(0<=n,m<=500000,0<=xi,yi<=10000000) 题解 一眼望去不可做. 用二位前缀 ...

  8. [bzoj4822][Cqoi2017]老C的任务&[bzoj1935][Shoi2007]Tree 园丁的烦恼

    来自FallDream的博客,未经允许,请勿转载,谢谢. 老 C 是个程序员.     最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统.作为经验丰富的程序员,老 C 轻松地完成 ...

  9. BZOJ1935:[SHOI2007]Tree 园丁的烦恼(CDQ分治)

    Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个园丁道: ...

随机推荐

  1. 网络编程中用到的SOCKET是什么?

    摘取网络上的一些内容: 什么是TCP/IP.UDP? Socket在哪里呢? Socket是什么呢? 什么是TCP/IP.UDP? TCP/IP(Transmission Control Protoc ...

  2. Echarts X轴多项百分比的展示

    app.title = '堆叠柱状图'; option = { tooltip : { trigger: 'axis', axisPointer : { // 坐标轴指示器,坐标轴触发有效 type ...

  3. JAVA中List,Map,Set接口的区别

    从三点来分析它们之间的不同: 1.继承的接口不同: List,Set接口都是继承于Collection接口的,而Map接口不是,它是一个顶层接口. 2.自身特点: List:用来处理序列的.对于放于的 ...

  4. Java之路---Day15(Collection类)

    2019-11-01-22:09:09 目录 1.Collection集合的概念 2.Collection集合常用方法 3.Iterator迭代器 4.增强for 5.Collection常用工具类 ...

  5. python json库

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. 1.json库的使用 使用 JSON 函数需要导入 json 库:import jso ...

  6. 另类WebShell监测机制--基于auditd

    鸣  谢 VSRC感谢业界小伙伴——老陈投稿精品原创类文章.VSRC欢迎精品原创类文章投稿,优秀文章一旦采纳发布,将有好礼相送,我们为您准备的丰富奖品包括但不仅限于:MacbookAir.VSRC定制 ...

  7. vim替换字符串

    1. s 命令来替换字符串 :s/vivian/sky/ #替换当前行第一个 vivian 为 sky :s/vivian/sky/g #替换当前行所有 vivian 为 sky :n,$s/vivi ...

  8. 没有用到React,为什么我需要import引入React?

    没有用到React,为什么我需要import引入React? 本质上来说JSX是React.createElement(component, props, ...children)方法的语法糖. 所以 ...

  9. html, js,css应用文件路径规则

    web前端一般常用文件 .html .css .js.但是当用css文件和html引入资源(比如图片)时,路径可能不相同.下面总结了几条. 使用相对路径引入规则: html或者js引入图片,按照htm ...

  10. 【故障处理】imp-00051,imp-00008

    [故障处理]imp-00051,imp-00008 1.1  BLOG文档结构图 1.2  故障分析及解决过程 imp导入报错: IMP-00051: Direct path exported dum ...