skkyk:线段树浅谈
推荐前辈学姐博客文章,写的很细
https://www.cnblogs.com/TheRoadToTheGold/p/6254255.html
学学半,此随笔主要是加深自己对线段树的理解
(话说为什么是树状数组,主要是因为我太菜了不会懒标记)
//代码中的位运算其实就是乘除2的一些操作#include<cstdio>
using namespace std;
int n,m,ans;
struct node {
int left,right,num;
}tree[*+];//经典的四倍空间,我也不知道为什么
+];
void build(int index,int l,int r)//建树,一棵满二叉树
{
tree[index].left=l,tree[index].right=r;
if(l==r)
{
tree[index].num=input[l];
return ;
}
;
build(index<<,l,mid);build(index<<|,mid+,r);
tree[index].num=tree[index<<].num+tree[index<<|].num;
}
void add(int index,int target,int k)//单点修改,变量是序号、目标、修改值
{
tree[index].num+=k;//对于每个可以递归到的点都是包含目标target这个点的集合,都要一并加上k
if(tree[index].left==tree[index].right)//单点集合返回
return ;
].right)
add(index<<,target,k);
|].left)
add(index<<|,target,k);//两个if语句都是判断是否存在交集,是则进行下一层
}
void query(int index,int l,int r)//区间求和(区间查询)
{
if(tree[index].right<=r&&tree[index].left>=l)
{
ans+=tree[index].num;//对于区间的子集累计答案
return ;//避免累计区间子集的区间子集 ??exm
}
if(tree[index].right==tree[index].left)
return ;
].right>=l)
query(index<<,l,r);
|].left<=r)
query(index<<|,l,r);//同为寻找交集
return ;
}
int main()
{
scanf("%d%d",&n,&m);
;i<=n;i++)
scanf("%d",input+i);
build(,,n);//建树
,a,x,y;i<=m;i++)
{
scanf("%d%d%d",&a,&x,&y);
)
add(,x,y);//单点修改
)
{
ans=;
query(,x,y);//区间查询
printf("%d\n",ans);
}
} return 0;
}
等改天问一下学长们懒标记的具体
skkyk:线段树浅谈的更多相关文章
- P3377 【模板】左偏树(可并堆) 左偏树浅谈
因为也是昨天刚接触左偏树,从头理解,如有不慎之处,跪请指教. 左偏树: 什 么是(fzy说)左偏树啊? 前置知识: 左偏树中dist:表示到右叶点(就是一直往右下找,最后一个)的距离,特别的,无右节点 ...
- 浅谈可持久化Trie与线段树的原理以及实现(带图)
浅谈可持久化Trie与线段树的原理以及实现 引言 当我们需要保存一个数据结构不同时间的每个版本,最朴素的方法就是每个时间都创建一个独立的数据结构,单独储存. 但是这种方法不仅每次复制新的数据结构需要时 ...
- 【转】Senior Data Structure · 浅谈线段树(Segment Tree)
本文章转自洛谷 原作者: _皎月半洒花 一.简介线段树 ps: _此处以询问区间和为例.实际上线段树可以处理很多符合结合律的操作.(比如说加法,a[1]+a[2]+a[3]+a[4]=(a[1]+a[ ...
- 数据结构3——浅谈zkw线段树
线段树是所有数据结构中,最常用的之一.线段树的功能多样,既可以代替树状数组完成"区间和"查询,也可以完成一些所谓"动态RMQ"(可修改的区间最值问题)的操作.其 ...
- 浅谈线段树 (例题:[USACO08FEB]酒店Hotel)By cellur925
今天我们说说线段树. 我个人还是非常欣赏这种数据结构的.(逃)因为它足够优美,有递归结构,有左子树和右子树,还有二分的思想. emm这个文章打算自用,就不写那些基本的操作了... 1° 简单的懒标记( ...
- 浅谈算法——线段树之Lazy标记
一.前言 前面我们已经知道线段树能够进行单点修改和区间查询操作(基本线段树).那么如果需要修改的是一个区间该怎么办呢?如果是暴力修改到叶子节点,复杂度即为\(O(nlog n)\),显然是十分不优秀的 ...
- 浅谈树套树(线段树套平衡树)&学习笔记
0XFF 前言 *如果本文有不好的地方,请在下方评论区提出,Qiuly感激不尽! 0X1F 这个东西有啥用? 树套树------线段树套平衡树,可以用于解决待修改区间\(K\)大的问题,当然也可以用 ...
- 浅谈线段树 Segment Tree
众所周知,线段树是algo中很重要的一项! 一.简介 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 使用线段树可以快速的查找某一个节点在 ...
- DS线段树优化最短路&&01bfs浅谈
1简介 为什么需要?原因很简单,当需要有大量的边去连时,用线段树优化可以直接用点连向区间,或从区间连向点,或从区间连向区间,如果普通连边,复杂度是不可比拟的.下面简单讲解一下线段树(ST)优化建图. ...
随机推荐
- 牛客网Java刷题知识点之什么是HTTP协议、什么是HTTP隧道、HTTP响应的结构是怎么样的、HTTP报头包含哪些、HTTP中GET与POST方法有什么区别
不多说,直接上干货! https://www.nowcoder.com/ta/review-java/review?tpId=31&tqId=21169&query=&asc= ...
- 运行nodejs项目报Process finished with exit code 1 错误
在项目中,明明在别人的机子上项目可以运行,但是复制到自己的电脑就无法就无法启动.报Process finished with exit code 1错误,也没提示错误地方.自己倒腾了很久总结了几个解决 ...
- 如何 发布一个 arcgis 服务
1,打开arcgis, 加载一个图层 后然后如下操作
- 解决“程序包管理器控制台”输入命令找不到Nuget包问题
问题: 问题原因: Nuget源的地址上不去 解决办法: 1.将Nuget源更新为可以国内使用的官方Nuget源. 1)打开VS2013:工具-->Nuget程序包管理器-->程序包管理器 ...
- eclipse修改xml配置文件tomcat不能同步问题
之前springmvc-config.cml中的Controller写成了Constroller,导致java.lang.ClassNotFoundException异常,而我更改后,更新的信息并没有 ...
- 能挣钱的微信JSSDK+H5混合开发
H5喊了那么久,有些人都说不实用,有些人却利用在微信中开发H5应用赚得盆满钵满.微信JSSDK + HTML 5,让移动Web开发与微信结合轻而易举!跨平台.零成本,让大众创业变得更方便. 我觉得现在 ...
- git clone fatal: unable to access 'https://github.com/carlon/demo.git/': Failed to connect to github.com port 443: Timed out
$ git config --global http.proxy $ git config --global --unset http.proxy 虽然之前没有设置代理,但是不知道为什么执行以上代码之 ...
- UIView动画效果之----翻转.旋转.偏移.翻页.缩放.取反的动画效
翻转的动画 //开始动画 [UIView beginAnimations:@"doflip" context:nil]; //设置时常 [UIView setAnimationDu ...
- url post 请求方法
最近的项目是给手机app 提供方法. 因此 此方法可以进行接口测试 static class HttpClient { static CookieContainer cookies = new Coo ...
- 目后佐道IT教育:师资团队
高端技术顾问 1. leepoor 拥有12年的Web开发和架构经验,在阿里巴巴担任高级架构师,参与阿里巴巴基础技术平台开发和www.alibaba.com架构设计.擅长大型网站技术架构,工作中经常使 ...