原文地址:http://www.cnblogs.com/GXZlegend/p/6825530.html


bzoj4822

题目描述

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

输入

第一行两个整数 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。   

输出

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

样例输入

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

样例输出

11
4

bzoj1935

题目描述

同上,只是少了个权值p_i,并且y的范围也减小到10^7


题解

树状数组

将点按x递增;将询问拆成2个,离线,离散化,按x递增排序。

然后每次找到一个询问,就判断有哪些点可以加到树状数组中,然后查询一下就好了。

注意题目中边上也算是包含,所以应将左下边界-1;同时坐标必须是正的,还需要+2。

如果是bzoj1935,不需要离散化也可以。

bzoj4822:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
struct POINT
{
int x , y;
ll v;
}a[500010];
struct QUERY
{
int p , d , u , id , opt;
}b[1000010];
int tot , val[1500010];
ll f[10000010] , ans[500010];
bool cmp1(POINT a , POINT b)
{
return a.x < b.x;
}
bool cmp2(QUERY a , QUERY b)
{
return a.p < b.p;
}
void update(int x , ll a)
{
int i;
for(i = x ; i <= tot ; i += i & -i) f[i] += a;
}
ll query(int x)
{
int i;
ll ans = 0;
for(i = x ; i ; i -= i & -i) ans += f[i];
return ans;
}
int main()
{
int n , m , i , s = 1;
scanf("%d%d" , &n , &m);
for(i = 1 ; i <= n ; i ++ ) scanf("%d%d%lld" , &a[i].x , &a[i].y , &a[i].v) , a[i].x += 2 , a[i].y ++ , val[++tot] = a[i].y;
for(i = 1 ; i <= m ; i ++ )
{
scanf("%d%d%d%d" , &b[i].p , &b[i].d , &b[i + m].p , &b[i].u);
b[i].p ++ , b[i].d ++ , b[i + m].p += 2 , b[i].u ++ ;
b[i + m].d = b[i].d , b[i + m].u = b[i].u;
b[i].id = b[i + m].id = i , b[i].opt = -1 , b[i + m].opt = 1;
val[++tot] = b[i].d , val[++tot] = b[i].u;
}
sort(a + 1 , a + n + 1 , cmp1) , sort(b + 1 , b + 2 * m + 1 , cmp2);
sort(val + 1 , val + tot + 1);
for(i = 1 ; i <= 2 * m ; i ++ )
{
while(s <= n && a[s].x <= b[i].p) update(lower_bound(val + 1 , val + tot + 1 , a[s].y) - val , a[s].v) , s ++ ;
ans[b[i].id] += b[i].opt * (query(lower_bound(val + 1 , val + tot + 1 , b[i].u) - val) - query(lower_bound(val + 1 , val + tot + 1 , b[i].d) - val - 1));
}
for(i = 1 ; i <= m ; i ++ ) printf("%lld\n" , ans[i]);
return 0;
}

bzoj1935:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct POINT
{
int x , y;
}a[500010];
struct QUERY
{
int p , d , u , id , opt;
}b[1000010];
int f[10000010] , k , ans[500010];
bool cmp1(POINT a , POINT b)
{
return a.x < b.x;
}
bool cmp2(QUERY a , QUERY b)
{
return a.p < b.p;
}
void update(int x , int a)
{
int i;
for(i = x ; i <= k ; i += i & -i) f[i] += a;
}
int query(int x)
{
int i , ans = 0;
for(i = x ; i ; i -= i & -i) ans += f[i];
return ans;
}
int main()
{
int n , m , i , s = 1;
scanf("%d%d" , &n , &m);
for(i = 1 ; i <= n ; i ++ ) scanf("%d%d" , &a[i].x , &a[i].y) , a[i].x += 2 , a[i].y ++ , k = max(k , a[i].y);
for(i = 1 ; i <= m ; i ++ )
{
scanf("%d%d%d%d" , &b[i].p , &b[i].d , &b[i + m].p , &b[i].u);
b[i].p ++ , b[i].d ++ , b[i + m].p += 2 , b[i].u ++ ;
b[i + m].d = b[i].d , b[i + m].u = b[i].u , k = max(k , b[i].u);
b[i].id = b[i + m].id = i , b[i].opt = -1 , b[i + m].opt = 1;
}
sort(a + 1 , a + n + 1 , cmp1) , sort(b + 1 , b + 2 * m + 1 , cmp2);
for(i = 1 ; i <= 2 * m ; i ++ )
{
while(s <= n && a[s].x <= b[i].p) update(a[s].y , 1) , s ++ ;
ans[b[i].id] += b[i].opt * (query(b[i].u) - query(b[i].d - 1));
}
for(i = 1 ; i <= m ; i ++ ) printf("%d\n" , ans[i]);
return 0;
}

【bzoj4822/bzoj1935】[Cqoi2017]老C的任务/[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 园丁的烦恼(树状数组 二维数点)

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

  3. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼 [树状数组 离线 离散化]

    传送门 刚才我还在郁闷网上怎么没人用$CDQ$分治做 突然发现根本没有时间序.... #include<iostream> #include<cstdio> #include& ...

  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. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼 +CDQ分治

    1935: [Shoi2007]Tree 园丁的烦恼 参考与学习:https://www.cnblogs.com/mlystdcall/p/6219421.html 题意 在一个二维平面中有n颗树,有 ...

  7. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼( 差分 + 离散化 + 树状数组 )

    假如矩阵范围小一点就可以直接用二维树状数组维护. 这道题,  差分答案, 然后一维排序, 另一维离散化然后树状数组维护就OK了. ----------------------------------- ...

  8. 1935: [Shoi2007]Tree 园丁的烦恼

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

  9. bzoj1382 1935: [Shoi2007]Tree 园丁的烦恼

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

随机推荐

  1. spring-传统AOP

    Spring传统AOP AOP的增强类型 AOP联盟定义了Advice(org.aopalliance.aop.Interface.Advice) 五类(目标类方法的连接点): 1.  前置通知(or ...

  2. oracle之bitmap索引

    oracle常见的索引是BTree索引和Bitmap索引. BTree索引特点: 默认索引 适合大量增删改查 不能用or操作符 适合高基数的列(即唯一值多) 创建sql:create index li ...

  3. 【vlan-端口配置】

    搭建好拓扑图如下: 分别配置两台终端的ip地址 创建vlan把e0/4/0接口加入到新的vlan中 连通性失败 . 同理在把e0/4/1加入到vlan视图中 连通性成功 : 搭建好拓扑图如下 进入e0 ...

  4. JavaScript - 库 jQuery

    测试 JavaScript 框架库 - jQuery 引用JQuery 如需测试JavaScript库,您需要在网页中引用它. 为了引用某个库,请使用<script>标签,其src属性设置 ...

  5. scrapy--matplotlib

    昨天晚上看了一些关于保存文件的相关资料,早早的睡了,白天根据网上查找的资料,自己再捡起来.弄了一上午就爬取出来了,开心!!!好吧,让我们开始 老规矩,先上图.大家也赶快行动起来 分类文件: 文件内co ...

  6. 图解HTTP总结(4)——返回结果的HTTP状态码

    HTTP状态码负责表示客户端HTTP请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作. 状态码的类别 2XX 成功 200 OK 表示从客户端发来的请求在服务器端被正常处理了. 在响应 ...

  7. 进程、线程、协程和GIL(二)

    上一篇博客讲了进程.线程.协程和GIL的基本概念,这篇我们来说说在以下三点: 1> python中使用threading库来创建线程的两种方式 2> 使用Event对消来判断线程是否已启动 ...

  8. 001---web应用程序

    什么是web应用? 应用程序分两种模式:C/S.B/S 1 .C/S:客户端(Client)与服务端 一般独立运行 2 .B/S:浏览器(Browser)与服务端 这类应用要借助浏览器:谷歌.火狐.I ...

  9. Android 拍照或相册选择照片进行显示缩放位图 Demo

    拍照后直接使用 BitmapFactory.decodeStream(...) 进行创建 Bitmap 并显示是有问题的. Bitmap 是个简单对象,它只存储实际像素数据,也就是说,即使原始照片已压 ...

  10. Hadoop常用高级特性

    HDFS HA HDFS HA(High Availability)高可用性 相同版本拷贝工具,分布式集群拷贝工具,使用MapReduce实现 DistCp Version2 Guide HFTP协议 ...