luoguP2184 贪婪大陆 题解(树状数组)
其实很容易理解就是询问一段区间内有多少段不同的区间
然后再仔细思索一下会发现:
1.只要一个区间的开头在一个节点i的左边,那么这个区间包含在区间1~i中。
2.只要一个区间的尾部在一个节点j的左边,那么这个区间肯定不属于j之后的所有区间
这时候就不难想到用两个树状数组维护:
第一个:维护节点i之前有多少个区间的开头
第二个:维护节点j之前有多少个区间的结尾
不难证明拿sum[i]-sum[j]得到的就是i~j中间地雷的个数(手动模拟一波就一清二楚了)
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<stack>
#include<queue>
#define lst long long
#define rg register
#define N 100050
using namespace std;
int n,m;
lst ans;
int tou[N],wei[N];//tou存前面有多少个区间的开始,以下简称头部树状数组
//wei存前面有多少个区间的尾部,以下简称尾部树状数组
//类似于前缀和
inline int read()//读入优化
{
rg int s=,m=;rg char ch=getchar();
while(ch!='-'&&(ch<''||ch>''))ch=getchar();
if(ch=='-')m=-,ch=getchar();
while(ch>=''&&ch<='')s=(s<<)+(s<<)+ch-'',ch=getchar();
return s*m;
}
//以下是树状数组的板子
inline int lowbit(rg int kk)//lowbit
{
return kk&(-kk);
}
inline void add_tou(rg int kk)//加入树状数组的头部数组
{
while(kk<=n)
{
++tou[kk];
kk+=lowbit(kk);
}
}
inline void add_wei(rg int kk)//加入树状数组的尾部数组
{
while(kk<=n)
{
++wei[kk];
kk+=lowbit(kk);
}
}
inline int sum_tou(rg int kk)//计算节点前有多少个区间的开始
{
rg int s=;
while(kk>)
{
s+=tou[kk];
kk-=lowbit(kk);
}
return s;
}
inline int sum_wei(rg int kk)//计算节点前有多少个区间的结束
{
rg int s=;
while(kk>)
{
s+=wei[kk];
kk-=lowbit(kk);
}
return s;
}
int main()
{
n=read(),m=read();//读入
for(rg int i=;i<=m;++i)
{
rg int sign=read();
rg int x=read(),y=read();//读入
if(sign==)
{
add_tou(x);//加入头部树状数组
add_wei(y);//加入尾部树状数组
}
else
{
ans=sum_tou(y)-sum_wei(x-);//运用已经证明的规律结题
printf("%d\n",ans);
}
}
return ;
}
通过这道题,我们可以发现大部分的树状数组题目可以用线段树做,但也有线段树不好维护的题目,这就需要灵活的利用树状数组的技巧(虽然题解里也有线段树比较好理解的) 我自认为我的代码还是蛮好看的,只是变量有点丑,但好理解
luoguP2184 贪婪大陆 题解(树状数组)的更多相关文章
- [luoguP2184] 贪婪大陆(树状数组)
传送门 用两个树状数组,cr 维护 1....x 中 r 的数量 cl 维护 1....x 中 l 的数量 求答案的时候只需要求 y 前面 被作为左端点 的个数 - x 前面 被作为右端点的个数 —— ...
- [SCOI2014]方伯伯的玉米田 题解(树状数组优化dp)
Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美. 这排玉米一共有N株,它们的高度参差不齐. 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感 ...
- Bzoj 1901: Zju2112 Dynamic Rankings 主席树,可持久,树状数组,离散化
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6321 Solved: 2628[Su ...
- 【树状数组】Bzoj1878[SDOI2009] HH的项链
Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变 ...
- COGS1752. [BOI2007]摩基亚Mokia(CDQ,树状数组)
题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能够回 ...
- 【bzoj5157】[Tjoi2014]上升子序列 树状数组
题目描述 求一个数列本质不同的至少含有两个元素的上升子序列数目模10^9+7的结果. 题解 树状数组 傻逼题,离散化后直接使用树状数组统计即可.由于要求本质不同,因此一个数要减去它前一次出现时的贡献( ...
- 【bzoj2743】[HEOI2012]采花 树状数组
题目描述 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公 ...
- 洛谷P3759 [TJOI2017]不勤劳的图书管理员 【树状数组套主席树】
题目链接 洛谷P3759 题解 树状数组套主席树板题 #include<algorithm> #include<iostream> #include<cstring> ...
- 【bzoj1878】[SDOI2009]HH的项链 树状数组
题目描述 HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变得越来越长.有一 ...
随机推荐
- day02 循环、格式化输出、运算符、编码
01 昨日内容回顾 python2x python3x区别: python2x:源码重复,不规范. python3x:源码规范,优美,清晰,简单. 编译型:将代码一次性全部转化成字节码. 代表语言:C ...
- cookie和session的联系与区别
Cookie 当你在浏览网站时,WEB服务器会先送一小小的资料放在你的计算机上,Cookie会帮你在网站上所打的文字或是一些选择都记录下来.当你下次再光临同一个网站时,WEB服务器会先看看有没有它上次 ...
- Oracle统计分析
1.oracle11g查看自动收集统计信息是否开启 SQL> select client_name,status from dba_autotask_client; CLIENT_NAME St ...
- 解决Minikube start卡住的方法
安装与问题 在mac上安装minikube对k8s进行学习,根据官方Quick Start brew cask install minikube 就可以完成minikube的安装 在安装前需要安装vi ...
- HttpRunnerManager安装部署(centos7)
一.安装python3环境 参考 二.安装依赖环境 根据根目录requirements.txt文件安装依赖,可以使用pip安装 #pip3 install -r requirements.txt 会遇 ...
- httpclient get/post请求
public static String httpPost(String url, JSONObject json) { String respContent = null; try{ HttpPos ...
- javascaipt中数组元素删除方法delete和splice
一.用delete 删除数组中元素(少用) 说明:delete: 只是被删除的元素变成了 undefined ,即数组长度不变 //定义数组 var array=["aa",&qu ...
- CentOS7.5 开启Samba服务
安装 yum install samba 其依赖关系包samba-client samba-common会自动安装上去 查看状态 service smb status 重启服务systemctl re ...
- springboot 加载jsp 刷新jsp ,刷新Controller (亲自尝试)
解决jsp加载成功.<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId&g ...
- php stripcslashes()函数 语法
php stripcslashes()函数 语法 作用:删除由 addcslashes() 函数添加的反斜杠.深圳直线电机 语法:stripcslashes(string) 参数: 参数 描述 str ...