博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线段树模板
阅读量:6943 次
发布时间:2019-06-27

本文共 1633 字,大约阅读时间需要 5 分钟。

//①建树 const int MAXM=50000;          //定义 MAXM 为线段最大长度 int a[MAXM+5],st[(MAXM<<2)+5];    // a 数组为 main 函数中读入的内容,st 数组为需要查询的数的信息(如和、最值等),树的空间大小为线段最大长度的四倍 void build(int o,int l,int r){    //传入的参数为 o:当前需要建立的结点;l:当前需要建立的左端点;r:当前需要建立的右端点        if(l==r)st[o]=a[l];      //当左端点等于右端点即建立叶子结点时,直接给数组信息赋值       else{          int m=l+((r-l)>>1);      // m 为中间点,左儿子结点为 [l,m] ,右儿子结点为 [m+1,r];          build(o << 1,l,m);        //构建左儿子结点            build((o << 1)|1,m+1,r);     //构建右儿子结点          st[o]=st[o << 1]+st[(o << 1)|1];  //递归返回时用儿子结点更新父节点,此处可进行更新最大值、最小值、区间和等操作       }}int main(){                       //在 main 函数中的语句          build(1,1,n);}
//②修改单点 void update(int o,int l,int r,int ind,int ans)//o、l、r为当前更新到的结点、左右端点,ind为需要修改的叶子结点左端点,ans为需要修改成的值; {      if(l==r){          //若当前更新点的左右端点相等即到叶子结点时,直接更新信息并返回        st[o]=ans;      return;     }     int m=l+((r-l)>>1);     if(ind<=m){         //若需要更新的叶子结点在当前结点的左儿子结点的范围内,则递归更新左儿子结点,否则更新右儿子结点          update(o<<1,l,m,ind,ans);     }     else{        update((o<<1)|1,m+1,r,ind,ans);     }     st[o]=max(st[o<<1],st[(o<<1)|1]);//递归回之后用儿子结点更新父节点(此处是区间最大值) }int main() {                               //在main函数中的语句          update(1,1,n,ind,ans);}
//③查询 int query(int o,int l,int r,int ql,int qr)//ql、qr为需要查询的区间左右端点{           if(ql>r||qr
=r) return st[o];        //若当前结点的区间被需要查询的区间覆盖,则返回当前结点的信息 int m=l+((r-l)>>1); int p1=query(o<<1,l,m,ql,qr),p2=query((o<<1)|1,m+1,r,ql,qr);  //p1为查询左儿子结点得到的信息,p2为查询右儿子结点得到的信息 return max(p1,p2);    //综合两个儿子结点的信息并返回 }{    //main函数中的语句 printf("%d\n",query(1,1,n,a,b));}

转载于:https://www.cnblogs.com/dfsac/p/6819793.html

你可能感兴趣的文章
Qt之资源系统
查看>>
RDS PostgreSQL\HDB PG 毫秒级海量时空数据透视 典型案例分享
查看>>
《数据库技术原理与应用教程》一3.5.3关系模型的数据结构、操纵和约束
查看>>
《超越LOGO设计:国际顶级平面设计师的成功法则(第2版)》—第1章无处不在的LOGO...
查看>>
“首次通过图灵测试的计算机”只是一场成功的娱乐宣传
查看>>
创业者的抑郁症,不是个小问题
查看>>
《大型网站服务器容量规划》一3.4 通过回归方程规划容量
查看>>
MaxCompute百问集锦(持续更新)
查看>>
《MATLAB智能算法超级学习手册》一一1.6 本章小结
查看>>
《驯狮记——Mac OS X 10.8 Mountain Lion使用手册》——2.8 Launchpad
查看>>
Weblogic10 集群配置
查看>>
《OSPF网络设计解决方案(第2版)》一1.5 网络拓扑类型
查看>>
图解 Java IO : 一、File源码
查看>>
iOS 安全之针对 mach_portal 的分析
查看>>
Java数组
查看>>
ROS机器人程序设计(原书第2版)1.2.7 安装rosinstall
查看>>
《“笨办法”学Ruby》(第3版)—习题2 注释和#号
查看>>
Java Reflection(三):构造器
查看>>
RHCSA 系列(十二): 使用 Kickstart 完成 RHEL 7 的自动化安装
查看>>
《C++面向对象高效编程(第2版)》——3.9 类可以包含什么
查看>>