bzoj1935: [Shoi2007]Tree 园丁的烦恼lowbit 离散化
链接
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 离散化的更多相关文章
- BZOJ 1935: [Shoi2007]Tree 园丁的烦恼( 差分 + 离散化 + 树状数组 )
假如矩阵范围小一点就可以直接用二维树状数组维护. 这道题, 差分答案, 然后一维排序, 另一维离散化然后树状数组维护就OK了. ----------------------------------- ...
- 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: 552 Solved: 220[Submit][ ...
- [bzoj1935][shoi2007]Tree 园丁的烦恼(树状数组+离线)
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 980 Solved: 450[Submit][ ...
- [bzoj1935][Shoi2007]Tree 园丁的烦恼 _树状数组
Tree 园丁的烦恼 bzoj-1935 Shoi-2007 题目大意:给定平面上的$n$个点,$m$次查询矩形点个数. 注释:$1\le n,m\le 5\cdot 10^5$. 想法:静态二维数点 ...
- 初涉二维数点问题&&bzoj1935: [Shoi2007]Tree 园丁的烦恼
离线好评 Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个 ...
- [BZOJ1935][SHOI2007]Tree 园丁的烦恼(离线+树状数组)
题意 给出第一象限的n个点,有m次询问,每次询问一个矩形中的点的个数.(0<=n,m<=500000,0<=xi,yi<=10000000) 题解 一眼望去不可做. 用二位前缀 ...
- [bzoj4822][Cqoi2017]老C的任务&[bzoj1935][Shoi2007]Tree 园丁的烦恼
来自FallDream的博客,未经允许,请勿转载,谢谢. 老 C 是个程序员. 最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统.作为经验丰富的程序员,老 C 轻松地完成 ...
- BZOJ1935:[SHOI2007]Tree 园丁的烦恼(CDQ分治)
Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个园丁道: ...
随机推荐
- 另一个角度的redis--redis 可以看做是c/s架构的软件
Redis 通信协议简单研究 redis 可以看做是c/s架构的软件,再打开一个终端输入下面的指令 https://www.cnblogs.com/nele/p/8908298.html redis ...
- Linux学习笔记之RAID笔记
RAID: Redundant Arrays of Inexpensive Disks Independent Berkeley: A case for Redundent Arrays of Ine ...
- React 父/子窗体参数传递
1.父窗体 import Modal from './Modal' onModalRef = ref => { this.modal = ref } onCallback = msg => ...
- C#读取Excel文件,准换为list
经常会用到,废话不多说直接贴代码 //读取Excel文件 public static DataTable ReadExcelToTable(string path)//excel存放的路径{try{ ...
- kylin Build过程问题排查:17 Step Name: Build Cube In-Mem
Kylin Build执行到底17步时报错:17 Step Name: Build Cube In-Mem ,错误截图如下: 点左下角的MRJob图标,打开查看错误信息: 从MRJob中的描述中可见 ...
- Java虚拟机是怎么new的对象?
本文涉及:Java中的new命令之后发生的事 类加载检查 java虚拟机在遇到一条 new 指令时,首先会检查是否能在常量池中定位到这个类的符号引用,并且是否已被加载过.解析和初始化过.如果没有,那必 ...
- IntelliJ IDEA重命名变量的问题
当我尝试使用Shift+ F6或简单地使用Refactor => Rename重命名变量时,有时intellij不仅重命名我想要的那个,而且还重命名具有相同名称的所有其他变量(在其他文件中)以及 ...
- 禁用浏览器自动给input填充账号和密码
如果input输入框type为text,设置autoComplete="off" <el-input v-model="ruleForm.loginId" ...
- 15、vue项目封装axios并访问接口
1.在src下新建util文件夹,在util下新建request.js文件: 封装axios: import axios from 'axios' import QS from 'qs'; // im ...
- App的开发过程(转载)
来源:https://www.cnblogs.com/sanwenyu/p/7234616.html 不同的项目管理模式或许会有完全不同的流程步骤.但是专业性几乎是保证产品质量的唯一准则. App的开 ...