BZOJ1935: [Shoi2007]Tree 园丁的烦恼(树状数组 二维数点)
题意
Sol
二维数点板子题
首先把询问拆成四个矩形
然后离散化+树状数组统计就可以了
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int MAXN = 4e6 + 10;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N, M, x[MAXN], y[MAXN], a[MAXN], b[MAXN], c[MAXN], d[MAXN], dx[MAXN], dy[MAXN], nx, ny, cnt, ans[MAXN];
struct Node {
int y, opt, id;
bool operator < (const Node &rhs) const {
return y < rhs.y;
}
};
vector<Node> q[MAXN];
vector<int> v[MAXN];
void des(int *d, int &num) {
sort(d + 1, d + num + 1);
num = unique(d + 1, d + num + 1) - d - 1;
}
int find(int *d, int num, int val) {
return lower_bound(d + 1, d + num + 1, val) - d;
}
struct BIT {
#define lb(x) (x & (-x))
int T[MAXN];
void Add(int x, int v) {
for(; x <= ny; x += lb(x))
T[x] += v;
}
int Query(int x) {
int ans = 0;
while(x) ans += T[x], x -= lb(x);
return ans;
}
#undef lb
}T;
void solve() {
for(int i = 0; i <= nx; i++) {
for(int j = 0; j < v[i].size(); j++)
T.Add(v[i][j], 1);
for(int j = 0; j < q[i].size(); j++) {
ans[q[i][j].id] += q[i][j].opt * T.Query(q[i][j].y);
}
}
}
signed main() {
N = read(); M = read();
for(int i = 1; i <= N; i++) x[i] = dx[++nx] = read(), y[i] = dy[++ny] = read();
for(int i = 1; i <= M; i++) {
a[i] = dx[++nx] = read(), b[i] = dy[++ny] = read(), c[i] = dx[++nx] = read(), d[i] = dy[++ny] = read();
//dx[++nx] = a[i] - 1; dy[++ny] = b[i] - 1; dx[++nx] = c[i] - 1; dy[++ny] = d[i] - 1;
}
des(dx, nx);
des(dy, ny);
for(int i = 1; i <= N; i++) {
x[i] = find(dx, nx, x[i]);
y[i] = find(dy, ny, y[i]);
v[x[i]].push_back(y[i]);
}
for(int i = 1; i <= M; i++) {
a[i] = find(dx, nx, a[i]); b[i] = find(dy, ny, b[i]); c[i] = find(dx, nx, c[i]); d[i] = find(dy, ny, d[i]);
q[c[i]].push_back((Node) {d[i], 1, i});
q[a[i] - 1].push_back((Node) {d[i], -1, i});
q[c[i]].push_back((Node) {b[i] - 1, -1, i});
q[a[i] - 1].push_back((Node) {b[i] - 1, 1, i});
}
solve();
for(int i = 1; i <= M; i++) printf("%d\n", ans[i]);
return 0;
}
/*
6 2
2 2
3 2
3 3
3 4
4 3
5 4
3 1 5 3
1 1 3 5
3
*/
BZOJ1935: [Shoi2007]Tree 园丁的烦恼(树状数组 二维数点)的更多相关文章
- [bzoj1935][shoi2007]Tree 园丁的烦恼(树状数组+离线)
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 980 Solved: 450[Submit][ ...
- 【bzoj4822/bzoj1935】[Cqoi2017]老C的任务/[Shoi2007]Tree 园丁的烦恼 树状数组
原文地址:http://www.cnblogs.com/GXZlegend/p/6825530.html bzoj4822 题目描述 老 C 是个程序员. 最近老 C 从老板那里接到了一个任务 ...
- BZOJ 1935: [Shoi2007]Tree 园丁的烦恼 [树状数组 离线 离散化]
传送门 刚才我还在郁闷网上怎么没人用$CDQ$分治做 突然发现根本没有时间序.... #include<iostream> #include<cstdio> #include& ...
- BZOJ 1935 Tree 园丁的烦恼 (树状数组)
题意:中文题. 析:按x排序,然后用树状数组维护 y 即可. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000" ...
- BZOJ4822[Cqoi2017]老C的任务——树状数组(二维数点)
题目描述 老 C 是个程序员. 最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统.作为经验丰富的程序员,老 C 轻松 地完成了系统的大部分功能,并把其中一个功能交给你来实 ...
- BZOJ1935: [Shoi2007]Tree 园丁的烦恼
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 552 Solved: 220[Submit][ ...
- bzoj千题计划143:bzoj1935: [Shoi2007]Tree 园丁的烦恼
http://www.lydsy.com/JudgeOnline/problem.php?id=1935 二维偏序问题 排序x,离散化树状数组维护y #include<cstdio> #i ...
- [bzoj1935][Shoi2007]Tree 园丁的烦恼 _树状数组
Tree 园丁的烦恼 bzoj-1935 Shoi-2007 题目大意:给定平面上的$n$个点,$m$次查询矩形点个数. 注释:$1\le n,m\le 5\cdot 10^5$. 想法:静态二维数点 ...
- [BZOJ1935][SHOI2007]Tree 园丁的烦恼(树状数组)
题目描述 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草. 有一天国王漫步在花园里,若有所思,他问一个园丁道: “最近我在思 ...
随机推荐
- Tomcat启动内存设置
Tomcat启动内存设置 Tomcat的启动分为startupo.bat启动和注册为windows服务的启动,下面一一说明. 1.startup.bat启动 在tomcat_home/bin目录下找到 ...
- 六:MyBatis学习总结(六)——调用存储过程
一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 create table p_user( id int primary key auto_incr ...
- JavaScript里的Date 对象属性及对象方法--实现简单的日历
上网搜索"js 日历插件"就会出来各种效果的功能丰富的日历插件,很多都可以下载源码,然后根据各自的需求对源码进行修改就可以直接用了. 但今天讲的不是如何使用这些插件,而是讲如何实现 ...
- windows server 2016安装docker
最近微软发布了windows server 2016,并原生支持docker,本文通过一系列的步骤,来学习怎么在windows server 2016安装docker. 1.下载 windows se ...
- artTemplate-优秀的前端模板引擎
artTemplate-优秀的前端模板引擎 1.html中引入artTemplate的js文件: <script type="text/javascript" src=&qu ...
- CSS_Spirte实现原理 分类: HTML+CSS 2015-04-28 22:58 531人阅读 评论(0) 收藏
CSS Spirte就是所谓的把很多的小图标合并成一张大的图片,然后使用CSS的background-position属性,来动态的定位自己需要图标的位置.这样做的目的主要是减少HTTP请求,加快网页 ...
- 记一次Socket编程踩的坑
闲来无事研究了下Socket,想用它做个简单的聊天室模型,结果踩了个坑,整半天才出来,惭愧啊,先上完成的代码吧 服务端: public partial class Form1 : Form { pub ...
- 【JQuery源码】事件绑定
事件绑定的方式有很多种.使用了jQuery那么原来那种绑定方式(elem.click = function(){...})就不推荐了,原因? 最主要的一个原因是elem.click = fn这种方式只 ...
- ES6 箭头函数 this 指向
ES6 箭头函数 this 指向 箭头函数有几个使用注意点: 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象. 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个 ...
- Virtualbox下载与安装步骤
不多说,直接上干货! 本主主要介绍一下如何从官方网站下载正版的 虚拟化 Oracle VM VirtualBox ,以及说明一下去官方下载正版软件的重要性. 一.为了系统的稳定以及数据的安全,建议下载 ...