来自FallDream的博客,未经允许,请勿转载,谢谢。

老 C 是个程序员。    
最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统。作为经验丰富的程序员,老 C 轻松地完成了系统的大部分功能,并把其中一个功能交给你来实现。由于一个基站的面积相对于整个城市面积来说非常的小,因此每个的基站都可以看作坐标系中的一个点,其位置可以用坐标(x, y)来表示。此外,每个基站还有很多属性,例如高度、功率等。运营商经常会划定一个区域,并查询区域中所有基站的信息。现在你需要实现的功能就是,对于一个给定的矩形区域,回答该区域中(包括区域边界上的)所有基站的功率总和。如果区域中没有任何基站,则回答 0。
n,m不知道多大 反正不会太大 不会超过500000吧  然后权值和坐标应该是int
 
因为没有强制在线,所以考虑离线,按照x坐标排序,y坐标离散之后插入线段树。
询问可以拆成两个,差分一下即可。
复杂度nlogn
#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
#define MN 1000000
#define N 524288
using namespace std;
inline int read()
{
int x = , f = ; char ch = getchar();
while(ch < '' || ch > ''){ if(ch == '-') f = -; ch = getchar();}
while(ch >= '' && ch <= ''){x = x * + ch - '';ch = getchar();}
return x * f;
}
ll Ans[MN+],t[N*+];
int cm=,n,m,cnt=,Y[MN+];
struct Tree{int x,y,z;}T[MN+];
struct ques{int x,l,r,id,ad;}q[MN*+];
bool cmp(ques x,ques y){return x.x<y.x;}
bool cmp2(Tree x,Tree y){return x.x<y.x;}
inline void Renew(int x,int ad){for(t[x+=N]+=ad,x>>=;x;x>>=)t[x]=t[x<<]+t[x<<|];}
inline ll Query(int l,int r)
{
if(l>r) return ;ll sum=;
for(l+=N-,r+=N+;l^r^;l>>=,r>>=)
{
if(~l&) sum+=t[l+];
if( r&) sum+=t[r-];
}
return sum;
}
int main()
{
n=read();m=read();
for(int i=;i<=n;++i) T[i].x=read(),Y[i]=T[i].y=read(),T[i].z=read();
sort(Y+,Y+n+);
for(int i=;i<=n;++i) if(Y[i]!=Y[i-]) Y[++cm]=Y[i];
for(int i=;i<=n;++i)
T[i].y=lower_bound(Y+,Y+cm+,T[i].y)-Y;
for(int i=;i<=m;++i)
{
int X1=read(),Y1=read(),X2=read(),Y2=read();
Y1=lower_bound(Y+,Y+cm+,Y1)-Y;
Y2=upper_bound(Y+,Y+cm+,Y2)-Y-;
q[++cnt]=(ques){X1-,Y1,Y2,i,-};
q[++cnt]=(ques){X2,Y1,Y2,i,};
}
sort(q+,q+cnt+,cmp);
sort(T+,T+n+,cmp2);
for(int i=,j=;j<=cnt;)
if(i<=n&&T[i].x<=q[j].x) Renew(T[i].y,T[i].z),++i;
else Ans[q[j].id]+=q[j].ad*Query(q[j].l,q[j].r),++j;
for(int i=;i<=m;++i) printf("%lld\n",Ans[i]);
return ;
}

[bzoj4822][Cqoi2017]老C的任务&[bzoj1935][Shoi2007]Tree 园丁的烦恼的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. python 异步协程

    """A very simple co-routine scheduler. Note: this is written to favour simple code ov ...

  2. EasyUI 修改 Messager 消息框大小

    需求是要修改确认消息窗口的大小. 简单的调用方法是这样的: $.messager.confirm('操作确认', '确定批量编辑文章?', function (r) { ... } 这个时候生成的弹窗 ...

  3. 深度学习之 cnn 进行 CIFAR10 分类

    深度学习之 cnn 进行 CIFAR10 分类 import torchvision as tv import torchvision.transforms as transforms from to ...

  4. IDEA安装和JDK的配置

    安装: 免费获取注册码:   http://idea.lanyus.com/ 将其压缩包解压后:  应用程序在bin目录下 打开之后: 选择第二个,输入刚获取的验证码: 成功. 如果没有安装JDK报错 ...

  5. Java:现有线程T1/T2/T3,如何确保T1执行完成之后执行T2,T3在T2执行完成之后执行。

    要实现多个线程执行完成先后,就要知道如何实现线程之间的等待,java线程等待实现是join.java的jdk中join方法实现如下: public final synchronized void jo ...

  6. UVA-10714 Ants---蚂蚁模拟

    题目链接: https://vjudge.net/problem/UVA-10714 题目大意: 给你一个长为L厘米的木棍在上面有n只蚂蚁,蚂蚁的爬行时间均为1厘米/秒,两只蚂蚁先遇会立即调转方向,调 ...

  7. [Debug]测试环境Giraffe无法正确登录

    BUG描述: 在测试环境192.168.2.72上的giraffe无法正确登录,输入正确的用户名.密码,点击登录无反应,输入错误的用户名密码会报错 原因: 2.72安装giraffe的磁盘空间已满,导 ...

  8. [转]使用awk批量杀进程的命令

    1. ps -ef|grep aaa|grep -v grep 这是大家很熟悉的命令,这里就不再多说,就是从当前系统运行的进程的进程名中包含aaa关键字的进程. 2. 后面部分就是awk命令了,一般a ...

  9. ubuntu16.04安装jdk1.8

    首先去Oracle官网下载JDK1.8的tar.gz压缩包. 然后下载下来的包的默认位置应该是在~/下载/下. 执行如下命令解压缩并安装JDK. cd ~/下载/ tar -zxvf jdk-8u16 ...

  10. jQuery系列 第七章 jQuery框架DOM操作

    第七章 jQuery框架的选择器 jQuery框架继承和优化了JavaScript访问DOM对象的特性,我们使用jQuery框架提供的api可以更加方便的操作DOM对象. 7.1 创建DOM节点 使用 ...