题意

给出第一象限的n个点,有m次询问,每次询问一个矩形中的点的个数.(0<=n,m<=500000,0<=xi,yi<=10000000)

题解

一眼望去不可做。

用二位前缀和的思想,一个矩形可以用以坐标轴为一对临边的四个矩形加减得到。

考虑离线,离散化。所以我们要求的只是若干个以坐标轴为一对临边的矩形的权值。

但还是不可做。

转化为序列问题,我们要求的矩形面积,其实就是每行前缀和的一段连续地和。

具体一些,就是,算出每一行的前缀和,对于横坐标相等的前缀和,我们维护他们,矩形的面积,就是这些前缀和的前面一段。同时维护一个横坐标指针x,在x右移时前缀和加上横坐标为x的点。我们发现这些操作可以用树状数组维护。

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int const N=;
int head[N],hed[N],c[N],n,m;
int cnt,cntx,cnty,totx,toty,ans[N],tot,x[N],y[N];
struct zb{
int x,y;
}zb[N];
struct ask{
int x,xx,y,yy;
}q[N];
struct edge{
int to,nxt;
}e[N];
struct hhh{
int to,nxt,w,id;
}f[N];
void add(int u,int v){
cnt++;
e[cnt].nxt=head[u];
e[cnt].to=v;
head[u]=cnt;
}
void ad(int u,int v,int c,int x){
tot++;
f[tot].nxt=hed[u];
f[tot].w=c;
f[tot].to=v;
f[tot].id=x;
hed[u]=tot;
}
int lowbit(int x){
return x&-x;
}
void update(int x,int w){
for(int i=x;i<=cnty;i+=lowbit(i)){
c[i]+=;
}
}
int check(int x,int w){
if(x==)return ;
int ans=;
for(int i=x;i>=;i-=lowbit(i)){
ans+=c[i];
}
return ans*w;
}
void work(){
for(int i=;i<=cntx;i++){
for(int j=head[i];j;j=e[j].nxt){
int v=e[j].to;
update(v,);
}
for(int j=hed[i];j;j=f[j].nxt){
int v=f[j].to;
ans[f[j].id]+=check(v,f[j].w);
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d%d",&zb[i].x,&zb[i].y);
x[++totx]=zb[i].x;
y[++toty]=zb[i].y;
}
for(int i=;i<=m;i++){
scanf("%d%d%d%d",&q[i].x,&q[i].y,&q[i].xx,&q[i].yy);
x[++totx]=q[i].x;
y[++toty]=q[i].y;
x[++totx]=q[i].xx;
y[++toty]=q[i].yy;
}
sort(x+,x++totx);
sort(y+,y++toty);
cntx=unique(x+,x++totx)-(x+);
cnty=unique(y+,y++toty)-(y+);
for(int i=;i<=n;i++){
zb[i].x=lower_bound(x+,x++cntx,zb[i].x)-x;
zb[i].y=lower_bound(y+,y++cnty,zb[i].y)-y;
add(zb[i].x,zb[i].y);
}
for(int i=;i<=m;i++){
q[i].x=lower_bound(x+,x++cntx,q[i].x)-x;
q[i].y=lower_bound(y+,y++cnty,q[i].y)-y;
q[i].xx=lower_bound(x+,x++cntx,q[i].xx)-x;
q[i].yy=lower_bound(y+,y++cnty,q[i].yy)-y;
ad(q[i].x-,q[i].y-,,i);
ad(q[i].xx,q[i].yy,,i);
ad(q[i].x-,q[i].yy,-,i);
ad(q[i].xx,q[i].y-,-,i);
}
work();
for(int i=;i<=m;i++){
printf("%d\n",ans[i]);
}
return ;
}

[BZOJ1935][SHOI2007]Tree 园丁的烦恼(离线+树状数组)的更多相关文章

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

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

  2. [BZOJ1935][SHOI2007]Tree 园丁的烦恼(树状数组)

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

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

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

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

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

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

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

  6. BZOJ1935: [Shoi2007]Tree 园丁的烦恼(树状数组 二维数点)

    题意 题目链接 Sol 二维数点板子题 首先把询问拆成四个矩形 然后离散化+树状数组统计就可以了 // luogu-judger-enable-o2 #include<bits/stdc++.h ...

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

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

  8. 【树状数组】bzoj1935 [Shoi2007]Tree 园丁的烦恼

    把y坐标离散化后,按x坐标排序,把询问拆成四个点,每次询问某个点左下角的点的个数,注意处理边界和重叠的情况. #include<cstdio> #include<algorithm& ...

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

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

随机推荐

  1. 移动端 input光标问题 以及 监听输入

    1.  input 框光标问题: input框 在ios上显示的与Android是不一样的 显示是这样的 而且在输入的时候 光标位置变化了 是这样的 为了达到一致的效果 在行高加上\9     如:l ...

  2. VisualStudio UnitTest FrameWork

    当创建单元测试时,Microsoft.VisualStudio.TestTools.UnitTesting的名字控件会添加到测试项目中,该名字控件中包含很多有用的类: 断言类:在单元测试中验证条件 初 ...

  3. Eclipse安装Web插件

    方法/步骤     本次安装教程,我把所有的步骤都写在了图片中,大家仔细查看图片即可,希望能帮到大家   1.选择菜单栏上的“Help”   选择Install New Software   在弹出的 ...

  4. CSS3新增的属性有哪些:

    CSS 用于控制网页的样式和布局. CSS3 是最新的 CSS 标准. CSS3新增了很多的属性,下面一起来分析一下新增的一些属性: 1.CSS3边框: border-radius:CSS3圆角边框. ...

  5. sass的用法小结(二)

    3. 导入SASS文件; css有一个特别不常用的特性,即@import规则,它允许在一个css文件中导入其他css文件.然而,后果是只有执行到@import时,浏览器才会去下载其他css文件,这导致 ...

  6. [ZJOI2015]诸神眷顾的幻想乡 广义后缀自动机_DFS_语文题

    才知道题目中是只有20个叶子节点的意思QAQ.... 这次的广义后缀自动机只是将 last 设为 1, 并重新插入. 相比于正统的写法,比较浪费空间. Code: #include <cstdi ...

  7. 架构思想之CAP原理

    由于自己负责后端的设计已经有一段时间,对设计的一些思想和理论有一些理解,但最近被问到什么是CAP时,却一脸懵逼,下来后专门针对CAP架构思想进行了一些专题学习,在这里也将这个概念引入给大家,大家可以有 ...

  8. 紫书 习题 8-25 UVa 11175 (结论证明)(配图)

    看了这篇博客https://blog.csdn.net/u013520118/article/details/48032599 但是这篇里面没有写结论的证明, 我来证明一下. 首先结论是对于E图而言, ...

  9. HTTP——学习笔记(8)

    HTTP中的一些协议内容会限制某些网站的功能使用 比如,Facebook这类的社交网站,需要实时地观察到海量用户公开发布的内容,而HTTP中的以下标准就会成为瓶颈: 一条连接上只可发送一个请求 请求只 ...

  10. P2899 [USACO08JAN]手机网络Cell Phone Network

    P2899 [USACO08JAN]手机网络Cell Phone Networ题目描述 Farmer John has decided to give each of his cows a cell ...