线段树

#include<stdio.h>
#pragma warning (disabled:4996)
#include<malloc.h>
//链表实现
typedef struct Node
{int Left,Right;struct Node *LChild,*RChild;long sum;
}SegNode,*SegTree;
//结构数组
typedef struct Node
{int Left,Right,Mid;
}SegNode;
//线段树的构造
void CreateSegTree(SegTree T,int left,int right)
{T=(SegTree)malloc(sizeof(SegNode));T->Left=left;T->Right=right;T->sum=0;//区间和开始化if(left+1<right)//判断是否是叶结点{CreateSegTree(T->LChild,left,(left+right)/2);CreateSegTree(T->RChild,(left+right)/2,right);}elseT->LChild=T->RChild=NULL;
}
//线段树的查询
long QuerySegTree(SegTree T,int left,int right)
{if(left<=T->Left&&right<=T->Right)return T->sum;else{long temsum=0;//临时变量,用于求部分和if(left<(T->Left+T->Right)/2)temsum=temsum+QuerySegTree(T->LChild,left,right);if(right>(T->Left+T->Right)/2)temsum=temsum+QuerySegTree(T->RChild,left,right);return temsum;}
}
//线段树的修改
void UpdateSegTree(SegTree T,int t,int delta)
{if(T->Left==T->Right)//判断是否为修改点T->sum=T->sum+delta;else{if(t<(T->Left+T->Right)/2)UpdateSegTree(T->LChild,t,delta);if(t>(T->Left+T->Right)/2)UpdateSegTree(T->RChild,t,delta);T->sum=T->LChild->sum+T->RChild->sum;//用子树的信息更新当前结点}
}
//采用结构数组储存方式实现建立线段树
void insert(int l,int r,int h,int num)
{if(SegNode[num].Left==l&&SegNode[num].Right==r){if(SegNode[num].h<h||!SegNode[num].h)SegNode[num].h=h;return;}if(r<=SegNode[num].Mid)insert(l,r,h,2*num);else if(l>=SegNode[num].mid)insert(l,r,h,2*num+1);else{insert(l,SegNode[num].Mid,h,2*num);insert(SegNode[num].Mid,r,h,2*num+1);}return;
}

高级数据结构 线段树相关推荐

  1. 高级数据结构-KD树

    高级数据结构-KD树 一.基本概念 KD树是一种对K维空间中的实例点进行存储以便对其进行快速检索的树形结构,表示对K维空间的一个划分 用于KNN算法的实现.给定一个目标点,利用KD树可以快速地查找出距 ...

  2. 数据结构线段树介绍与笔试算法题-LeetCode 307. Range Sum Query - Mutable--Java解法

    此文首发于我的个人博客:zhang0peter的个人博客 LeetCode题解文章分类:LeetCode题解文章集合 LeetCode 所有题目总结:LeetCode 所有题目总结 线段树(Segme ...

  3. 2017西安交大ACM小学期数据结构 [线段树]

    Problem B+ 发布时间: 2017年7月1日 02:08   最后更新: 2017年7月1日 02:10   时间限制: 1000ms   内存限制: 64M 描述 给定一个长度为n的序列a1 ...

  4. 数据结构---线段树

    线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326  持续更新中···   一:线段树基本概念 1:概述 线段树 ...

  5. 数据结构 —— 线段树

    [概述] 线段树是一种二叉搜索树,其存储的是一个区间的信息,每个结点以结构体的形式去存储,每个结构体包含三个元素:区间左端点.区间有端点.该区间要维护的信息(视实际情况而定),其基本思想是分治的思想. ...

  6. 【算法学习笔记】高级数据结构 B树

    参考算法导论第18章 B树 1. B树概述 B树是为「磁盘或其他直接存取的辅助存储设备」而设计的一种平衡搜索树.B树类似于红黑树(算导第13章),但它们在降低磁盘I/O操作数 minimizing d ...

  7. 【Java版高级数据结构】树论基础二叉树

    本文涉及代码见博主的github : https://github.com/chenruoyu0319/data-structure-for-java/tree/main/%E6%A0%91%E8%A ...

  8. (转)线段树的区间更新

    原文地址:http://blog.csdn.net/zip_fan/article/details/46775633 写的很好,昨天刚刚开始写线段树,有些地方还不是很明白,看了这篇博文,学会了数组形式 ...

  9. python 树状数组_【算法日积月累】19-高级数据结构:树状数组

    树状数组能解决的问题 树状数组,也称作"二叉索引树"(Binary Indexed Tree)或 Fenwick 树. 它可以高效地实现如下两个操作: 1.数组前缀和的查询: 2. ...

最新文章

  1. flash动画制作成品_Flash制作点燃蛋糕蜡烛的互动动画
  2. 【spring相关面试题摘录】
  3. 【maven】dependency的systemPath属性:引入本地系统中的jar
  4. Day-4: Python函数
  5. linux c之access方法介绍
  6. R读取MySQL数据出现乱码,解决该问题的方法总结
  7. cocos2dx进阶学习之屏幕适配
  8. Android Span 进阶
  9. 计算机科学与技术概论,计算机科学与技术概论论文
  10. 推荐几个不错第 Java 学习网站
  11. 杨永智:创业者需具备的六大基因 五大攻略(下)
  12. 1.1.4. Multi-task Lasso(多任务 Lasso)(多任务学习)
  13. 软件测试 - 测试基础知识
  14. 计算机网络考研、招聘面试问题总结
  15. 电商用户标签体系建设基础步骤
  16. 谭浩强c语言第八章指针ppt,谭浩强c语言第八章_指针.ppt
  17. python 代理ip群发邮件1000人_python 群发邮件数量限制_qq邮箱群发邮件的数量和速度限制是多少?...
  18. 哈工大 计算机系统安全 复习整理 作业答案
  19. 大班幼儿告状行为与教师教育态度和方法的研究
  20. 【C语言小知识】C语言中的exit(1)和exit(0)表示什么意思

热门文章

  1. Android学习笔记之ProgressDialog
  2. Struts学习(五):对POJO对象访问的支持
  3. c global 拦截 ajax,@RestControllerAdvice 全局拦截异常(示例代码)
  4. 画出降维后的图片_有没有人能画出《三体》里太阳系被二维化的概念图?
  5. layer的一种用法,页面多选时用地址传递值过多时,用弹出层画一个form表单,然后通过提交表单传值
  6. linux 设备树_嵌入式系统砖家_初识设备树
  7. java开发经验分享_java开发经验分享(一)
  8. 劳力士格林尼治价格_劳力士行情暴跌后回涨,什么时候才是入手的最佳时机?...
  9. OpenCV对图像进行尺寸变换
  10. 九种将元器件从PCB上拆焊下的方法