4822: [Cqoi2017]老C的任务

Time Limit: 20 Sec  Memory Limit: 512 MB
Submit: 379  Solved: 203
[Submit][Status][Discuss]

Description

老 C 是个程序员。    
最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统。作为经验丰富的程序员,老 C 轻松
地完成了系统的大部分功能,并把其中一个功能交给你来实现。由于一个基站的面积相对于整个城市面积来说非常
的小,因此每个的基站都可以看作坐标系中的一个点,其位置可以用坐标(x, y)来表示。此外,每个基站还有很多属
性,例如高度、功率等。运营商经常会划定一个区域,并查询区域中所有基站的信息。现在你需要实现的功能就是,
对于一个给定的矩形区域,回答该区域中(包括区域边界上的)所有基站的功率总和。如果区域中没有任何基站,则回
答 0。

Input

第一行两个整数 n, m,表示一共有n个基站和m次查询。    
接下来一共有 n 行,每行由x_i , y_i , p_i 三个空格隔开的整数构成,表示一个基站的坐标(x_i , y_i )和功率p
_i 。不会有两个基站位于同一坐标。    
接下来一共有m行,每行由x1_j , y1_j , x2_j , y2_j 四个空格隔开的整数构成,表示一次查询的矩形区域。该矩
形对角坐标为(x1_j , y1_j )和(x2_j , y2_j ),且 4 边与坐标轴平行。 
2^31 ≤ x_i , y_i , p_i , x1_j , y1_j , x2_j , y2_j < 2^31, x1_j ≤ x2_j, y1_j ≤ y2_j。   

Output

输出 m 行,每行一个整数,对应每次查询的结果。

Sample Input

4 2
0 0 1
0 1 2
2 2 4
1 0 8
0 0 1 1
1 1 5 6

Sample Output

11
4

HINT

Source

[Submit][Status][Discuss]

第一眼离散化+二维树状数组,但是显然空间开不下。

那么直接把每个矩形拆成两条边,离线后扫描线+树状数组就好了。

感觉对于区间问题比较常用的几个:主席树,扫描线,CDQ分治,莫队。

没排序调了半天。。

 #include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
#define find(x) lower_bound(b+1,b+tot+1,x)-b
typedef long long ll;
using namespace std; const int N=;
ll p[N],c[N<<],ans[N];
int n,m,tot,cnt,x[N],y[N],x1[N],y1[N],x2[N],y2[N],b[N<<];
struct P{ int x,y; ll p; }pt[N<<];
struct Q{ int x,l,r,pos; }q[N<<];
bool operator <(P a,P b){ return a.x<b.x; }
bool operator <(Q a,Q b){ return a.x<b.x; } void add(int x,ll k){ for (; x<=tot; x+=x&-x) c[x]+=k; }
ll que(int x){ ll res=; for (; x; x-=x&-x) res+=c[x]; return res; } int main(){
freopen("task.in","r",stdin);
freopen("task.out","w",stdout);
scanf("%d%d",&n,&m);
rep(i,,n) scanf("%d%d%lld",&x[i],&y[i],&p[i]),b[++tot]=x[i],b[++tot]=y[i];
rep(i,,m){
scanf("%d%d%d%d",&x1[i],&y1[i],&x2[i],&y2[i]);
b[++tot]=x1[i]-; b[++tot]=y1[i]-; b[++tot]=x2[i]; b[++tot]=y2[i];
}
sort(b+,b+tot+); tot=unique(b+,b+tot+)-b-;
rep(i,,n) x[i]=find(x[i]),y[i]=find(y[i]),pt[i]=(P){x[i],y[i],p[i]};
rep(i,,m){
x1[i]=find(x1[i]-); y1[i]=find(y1[i]-);
x2[i]=find(x2[i]); y2[i]=find(y2[i]);
q[++cnt]=(Q){x1[i],y1[i],y2[i],i}; q[++cnt]=(Q){x2[i],y1[i],y2[i],i};
}
sort(pt+,pt+n+); sort(q+,q+cnt+); int now=;
rep(i,,cnt){
while (pt[now].x<=q[i].x && now<=n) add(pt[now].y,pt[now].p),now++;
if (!ans[q[i].pos]) ans[q[i].pos]=que(q[i].r)-que(q[i].l);
else ans[q[i].pos]=que(q[i].r)-que(q[i].l)-ans[q[i].pos];
}
rep(i,,m) printf("%lld\n",ans[i]);
return ;
}

[BZOJ4822][CQOI2017]老C的任务(扫描线+树状数组)的更多相关文章

  1. FZU 2225 小茗的魔法阵 扫描线+树状数组

    这个题和一个CF上的找"Z"的题差不多,都是扫描线+树状数组 从右上角的主对角线开始扫描,一直扫到左下角,每次更新,右延伸等于该扫描线的点,注意在其所在的树状数组更新就好了 时间复 ...

  2. 【BZOJ1818】[Cqoi2010]内部白点 扫描线+树状数组

    [BZOJ1818][Cqoi2010]内部白点 Description 无限大正方形网格里有n个黑色的顶点,所有其他顶点都是白色的(网格的顶点即坐标为整数的点,又称整点).每秒钟,所有内部白点同时变 ...

  3. HDU 5862 Counting Intersections 扫描线+树状数组

    题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 Counting Intersections Time Limit: 12000/ ...

  4. 【loj6041】「雅礼集训 2017 Day7」事情的相似度 后缀自动机+STL-set+启发式合并+离线+扫描线+树状数组

    题目描述 给你一个长度为 $n$ 的01串,$m$ 次询问,每次询问给出 $l$ .$r$ ,求从 $[l,r]$ 中选出两个不同的前缀的最长公共后缀长度的最大值. $n,m\le 10^5$ 题解 ...

  5. 【bzoj4540】[Hnoi2016]序列 单调栈+离线+扫描线+树状数组区间修改区间查询

    题目描述 给出一个序列,多次询问一个区间的所有子区间最小值之和. 输入 输入文件的第一行包含两个整数n和q,分别代表序列长度和询问数.接下来一行,包含n个整数,以空格隔开,第i个整数为ai,即序列第i ...

  6. 【BZOJ3488】[ONTAK2010]Highways 扫描线+树状数组

    [BZOJ3488][ONTAK2010]Highways Description 给一棵n个点的树以及m条额外的双向边q次询问,统计满足以下条件的u到v的路径:恰经过一条额外的边不经过树上u到v的路 ...

  7. 【BZOJ4009】[HNOI2015]接水果 DFS序+整体二分+扫描线+树状数组

    [BZOJ4009][HNOI2015]接水果 Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black, ...

  8. BZOJ_1818_[Cqoi2010]内部白点 _扫描线+树状数组

    BZOJ_1818_[Cqoi2010]内部白点 _扫描线+树状数组 Description 无限大正方形网格里有n个黑色的顶点,所有其他顶点都是白色的(网格的顶点即坐标为整数的点,又称整点).每秒钟 ...

  9. BZOJ 1818: [Cqoi2010]内部白点 扫描线+树状数组

    问题转化为求每一个极长横线段与极长纵线段的交点个数. 这个东西用扫描线+树状数组维护一下就可以了. code: #include <cstdio> #include <algorit ...

随机推荐

  1. MyBatis 系列五 之 延迟加载、一级缓存、二级缓存设置

    MyBatis的延迟加载.一级缓存.二级缓存设置 首先我们必须分清延迟加载的适用对象 延迟加载 MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟加载规则推迟对关联对象的se ...

  2. Super A^B mod C (快速幂+欧拉函数+欧拉定理)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=1759 题目:Problem Description Given A,B,C, You should quick ...

  3. 将文件内容导入到MySQL中

    1.作用 把文件系统的内容导入到数据库中 2.语法 load data infile "文件名" into table 表名 fields terminated by " ...

  4. 20、redis和memcached比较?

    1.Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等: 2.Redis不仅仅支持简单的k/v类型的数据,同时还提供lis ...

  5. mssql手工注入1

    强制字符转成数字, 所以报错, 能获得数据 查版本号: http: -- 查数据库版本: http: -- 查当前数据库用户(如果看到dbo 那么多半当前数据库的用户是dba权限): http: -- ...

  6. 【Python学习笔记】Coursera课程《Python Data Structures》 密歇根大学 Charles Severance——Week6 Tuple课堂笔记

    Coursera课程<Python Data Structures> 密歇根大学 Charles Severance Week6 Tuple 10 Tuples 10.1 Tuples A ...

  7. 数据库===轻量级mysql数据库管理工具

    已经上传至: https://download.csdn.net/download/bo_mask/10276952

  8. python基础===codecs打开文件,解决文件编码格式的问题

    codecs https://docs.python.org/3/library/codecs.html 我们经常用open打开文件的时候会出现各式各样的错误,编码格式的问题,等等~真的很烦 现在尽量 ...

  9. Unsupported gpu architecture 'compute_20'

    NVCC src/caffe/layers/reduction_layer.cunvcc fatal   : Unsupported gpu architecture 'compute_20'Make ...

  10. android 与JS之间的交互

    在页面布局很复杂并且是动态的时候,android本身的控件就变得不是那么地灵活了,只有借助于网页的强大布局能力才能实现,但是在操作html页面的同时也需要与android其它的组件存在交互,比如说 在 ...