首页 > 其他分享 >线段树学习笔记

线段树学习笔记

时间:2023-10-05 17:34:28浏览次数:38  
标签:std 200005 int 线段 笔记 学习

学习链接

代码(未完成)

#include<bits/std++.h>
using namespace std;

int array[200005],tree[200005<<2]; // array是初始数组,tree是线段树
void update(int item) // 更新 item 号节点的函数,这里是最大值,也可更改为区间和、最小值等
{
    tree[item]=max(tree[item<<1],tree[item<<1|1]); // item<<1 是左子树下标,item<<1|1 是右子树下标
}

void build_tree(int item,int left,int right) // item 表示要建立的节点编号,left 和 right 表示需要建立区间的左、右端点
{
    if(left==right) // 这是一个叶子结点
    {
        tree[item]=left; // 直接赋值
        return;
    }

    int mid=(left+right)/2; // 把区间分成两半
    build_tree(item<<1,left,mid); // 建立左子树
    build_tree(item<<1|1,mid+1,right); // 建立右子树
    update(item); // 更新自己
}

void change(int changeItem,int val,int left,int right,int nowItem)
{
    if(left==right) // 叶子结点
    {
        array[nowItem]=val;
        tree[nowItem]=val; // 线段树和原数组都要更新
    }
    int mid=(left+right)/2; // 把区间分成两半
    if(changeItem<mid) // 需要更新的结点在左子树
    {
        change(changeItem,val,left,mid,k<<1);
    }
    else // 在右子树
    {
        change(changeItem,val,mid+1,right,k<<1|1);
    }
    update(nowItem); // 更新自己
}

int main(void)
{

}

标签:std,200005,int,线段,笔记,学习
From: https://www.cnblogs.com/dijkstraphoenix/p/Segment-tree-study-note.html

相关文章

  • 信息学 学习/复习 抽签器(附源码)
    信息学学习/复习抽签器(附源码)效果图以下是源代码,可自行修改[C++]//ByDijkstraPhoenix#include<bits/stdc++.h>#include<windows.h>usingnamespacestd;vector<string>item;intmain(void){ item.push_back("Manacher"); item.push_back("Tarjan&quo......
  • 【Linux笔记】tar——压缩与解压
    #【Linux笔记】tar——压缩与解压打包与压缩打包文件(生成新的tar文件):tar-cfnewTar.tarfile.txt打包并压缩文件(生成新的.tar.gz文件):tar-zcfnewTar.tar.gzfile.txt注:打包和压缩是不一样的概念gzip这种压缩方式默认只能压缩一个文件,所以当有多个文件需要压缩时,就......
  • 微机原理笔记
    \[chapter1.\quad绪论\]Intel微处理器的发展1978年:8086/8088微处理器出现,首枚16位微处理器。微型计算机概述计算机加电以后,首先运行BIOS(BasicInputOutputSystem)系统,进行硬件的检查、初始化(加电时寄存器的内容是随机的)、给操作系统提供编程接口等。通过硬件驱动程......
  • 学习多进程多线程
    两个单词:Process进程、Thread线程线程的三种创建方式:1、继承Thread类   写一个子类去继承然后重写run()方法2、实现Runnable接口3、实现Callable接口  这个一般工作三到五年后才经常用到 1、创建一个线程对象,然后调用start()方法可以交替进行 要是用run()方......
  • C/C++学习 -- HMAC算法
    1.HMAC算法概述HMAC,全称为HMAC-MD5、HMAC-SHA1、HMAC-SHA256等,是一种在数据传输中验证完整性和认证来源的方法。它结合了哈希函数和密钥,通过在数据上应用哈希函数,生成一个带密钥的散列值,用于验证数据的完整性。HMAC算法广泛应用于网络协议、数字签名、认证和访问控制等领域。2.HM......
  • MapReduce之学习规约
    1、概念2、代码实现自定义一个类:在JobMain(与之前的基本一样)里面:......
  • 《需求掌握过程》阅读笔记
    今天读了《掌握需求过程·》这本书,理解了什么是需求,为什么要掌握需求,在开发软件时,身为一个程序员就要明白,开发软件的前前后后需要知道的东西,将尽可能多的可以预知的内容,做到心知肚明。目前的我们在开发软件的时候还是做的还是比较小的项目,偶尔也会遇到一些数据库设计出错导致,编写......
  • 视频学习资料汇总
    Vue3+.NET7最新框架实战,手写电商管理后台|2023全新录制,前后分离架构(C#/.NET6/.NETCore)https://pan.baidu.com/s/1SBt4RTT_m6uA9pk857KlcQ?pwd=6666 https://www.bilibili.com/video/BV16s4y1m7bd/?spm_id_from=333.337.search-card.all.click&vd_source=e6b56a12a1d9ef11f6c......
  • MapReduce的排列和序列化的学习
    1、概念和原理--结构化对象转换为字节流2、编程流程(举例说明)1、读取文件为键值对<偏移量,文件内容>2、Map阶段3、排序4、Reduce阶段5、保存结果--使用TextOutputFormat类3、代码编写1、自定义类型和比较器--自定义命名为SortBean并实现接口WritableComparable,还需......
  • vue学习二
    <divid="app2"><divv-html="msg"></div></div><script>constapp2=newVue({el:'#app2',data:{msg:'<ah......