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)优化建图. ...
随机推荐
- springmvc整合elasticsearch
网上大多时关于springboot整合的,也有spring的,但是 坑太多,都没法愉快的玩耍 这篇让我整合成功 https://www.cnblogs.com/sunny1009/articles/7 ...
- js js弹出框、对话框、提示框、弹窗总结
js弹出框.对话框.提示框.弹窗总结 一.JS的三种最常见的对话框 //====================== JS最常用三种弹出对话框 ======================== //弹 ...
- mybatis实现使用原生的sql
1.相应的xml文件中 <select id="selectByCategories" resultType="map" parameterType=&q ...
- Visual Studio 2005 移植 (札记之一)【zhuan】
Visual Studio 2005 移植 - WINVER,warning C4996, error LINK1104 一.WINVER Compile result: WINVER not d ...
- Objective-C Protocols
Objective-C allows you to define protocols, which declare the methods expected to be used for a part ...
- git处理时的问题
1. 在node.js开发的时候常常会遇到从别人的远程仓库中clone时出现文件名过长的错误, 或则是在本地npm下载之后的文件进行上传到自己的远程仓库的时候会出现 File too long的情况, ...
- SIT&UAT
- iOS Category实现原理 (补充)
iOS Category实现原理 (补充) load 和 initialize load load方法会在程序启动就会调用,当装载类信息的时候就会调用. 调用顺序看一下源代码.在 objc-loadm ...
- 快速生成导入亿级测试数据到sqlserver
如果采用insert into 循环一条一条插入速度比较慢 可以先将数据插入临时表,然后在临时表数据量到达批量插入的行数时执行例如:目标表 (col1,col2,col3) --根据目标表结构复制一个 ...
- ubuntu 14.04 安装mysql,并配置远程连接和中文乱码
1. 安装MySQL的jar root@computer-PowerEdge-T30:~# sudo apt-get install mysql-server mysql-client在本次安装中,根 ...