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 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个园丁道: ...
随机推荐
- C# vb .NET读取识别条形码线性条码code128
code128是比较常见的条形码编码规则类型的一种.如何在C#,vb等.NET平台语言里实现快速准确读取该类型条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准 ...
- C# 使用SuperSocket
一.需求场景 (1)使用SuperSocket进行网络通信 二.所需软件 (1)SocketTool 三.实现步骤 (1)使用Nuget管理器安装SuperSocket.Engine 该插件已经包 ...
- Angular复习笔记7-路由(上)
Angular复习笔记7-路由(上) 关于Angular路由的部分将分为上下两篇来介绍.这是第一篇. 概述 路由所要解决的核心问题是通过建立URL和页面的对应关系,使得不同的页面可以用不同的URL来表 ...
- Java自学-数字与字符串 字符串转换
Java中把数字转换为字符串,字符串转换为数字 步骤 1 : 数字转字符串 方法1: 使用String类的静态方法valueOf 方法2: 先把基本类型装箱为对象,然后调用对象的toString pa ...
- 原生JS实现前端动画框架
封装了一个JS方法,可支持块元素的常规动画:高.宽.透明度.位置等,同时支持链式动画和同时运动,参照imooc整理,具体代码如下: /** * 获取HTML元素属性值 * obj是Element, a ...
- Texture(ASDK)、ComponentKit、LayoutKit、YogaKit
YogaKit 最轻量,改动量最小,目的最纯粹,同时也最类似于使用 frame ,需要自己造一波在 UITableView 中使用的轮子(各类 frame 结果缓存方案).同类的备选方案是 FlexB ...
- JavaScript 之 定时器
JavaScript 里面有两个定时器:setTimeout() 和 setInterval() . 区别: setTimeout():相当于一个定时炸弹,隔一段时间执行,并且只会执行一次就不在执行了 ...
- Windows Server 2012 R2 远程桌面自动设置为不允许连接问题解决方案
用“gpedit.msc”调出策略组设置窗口,在策略组界面点击:计算机配置->管理模块->Windows组件->远程桌面服务->远程桌面会话主机->连接->允许用户 ...
- 详解CentOS6.7部署Tomcat及主配置文件
Java程序实现部署及应用 POSIX :可移植操作系统,编程操作系统接口规范,实现跨平台编译运行. API:应用程序编程接口 ABI:应用程序二进制接口 描述了应用程序和操作系统之间,一个应用和它的 ...
- Locust性能测试7-分布式执行
前言 使用Locust进行性能测试时,当一台单机不足以模拟所需的用户数量的时候,可以在多台机器上分布式的执行性能测试. locust分布式启动场景有2种,一种是单机设置master和slave模式,另 ...