线段树的建立和查找
来源:互联网 发布:淘宝网店客服工作职责 编辑:程序博客网 时间:2024/06/06 01:35
以前经常听大佬说“用线段树优化”,然而我连这是什么东西都不知道(。・・)ノ,所以今天特意去学了一下。
线段树是一种二叉树,它的每个节点的值表示一个数组一段区间的最大值(或最小值,以下相同),如果某个节点的表示的数组区间[l,r]内的最大值,那么它的左孩子表示数组区间[l,(l+r)/2]内的最大值,它的右孩子表示数组区间[(l+r)/2+1,r]内的最大值。(这只是我的粗浅理解,如果不对,麻烦大佬提醒一下,谢谢~~)
线段树可以快速地找出数组中某段区间的最大值(或最小值),建立耗时O(n),查询、更新操作耗时O(logn),如果查找的次数比较多的话,比顺序查找快很多。
看了一下午,只会建立和查找,还不会更新线段树,原谅我比较菜.....
线段树的建立和查找:
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <ctime>using namespace std;typedef struct xxx{int valu;xxx *lchild;xxx *rchild;}xxx;int set_xdtree (int date[], xxx *&p, int l, int r);int search (xxx *p, int l, int r, int x, int y);int main(){int a[1000] = {156, 68, 65, 98, 64, 37, 1324, 789, 456, 24, 78};xxx *root, *p;root = NULL;set_xdtree (a, root, 0, 10);cout << search (root, 0, 10, 2, 9);return 0;}//建立线段树 int set_xdtree (int date[], xxx *&p, int l, int r){int a, b;int mid;p = new xxx;if (l >= r){p -> lchild = NULL;p -> rchild = NULL;p -> valu = date[l];return date[l];}mid = (l + r) /2;a = set_xdtree (date, p -> lchild, l, mid);b = set_xdtree (date, p -> rchild, mid + 1, r);if (a > b){p -> valu = a;}else{p ->valu = b;}return p -> valu;}//查找区间[x,y]内的最大值 int search (xxx *p, int l, int r, int x, int y){int a, b;int mid;if (x <= l && y >= r){return p -> valu;}mid = (l + r) / 2;if (mid < x){return search (p -> rchild, mid + 1, r, x, y);}if (mid >= y){return search (p -> lchild, l, mid, x, y);}a = search (p -> lchild, l, mid, x, mid);b = search (p -> rchild, mid + 1, r, mid + 1, y);if (a > b){return a;}else{return b;}}
阅读全文
0 0
- 线段树的建立和查找
- 线段树的建立、更新、查找
- 线段树的建立
- 线段树的建立
- 线段树的建立
- 哈希表的建立和查找
- 堆和二叉查找树的建立的时间复杂度
- 线段树的极值查找
- 二叉查找树的建立,遍历,查找
- 二叉查找树的建立
- 二叉排序树的建立、查找和删除
- 二叉树的递归创建,以及二叉查找树查找的建立 和遍历查找的比较
- 线段树的创建插入查找删除
- HDU - 1556 和1166,线段树的区间插入,单点查找和单点插入与区间查找
- 字典树的建立、删除、查找
- 算法---二叉树的建立,查找,删除
- 字典树的建立,插入,查找
- 二叉树的建立,遍历查找
- BZOJ 2002 弹飞绵羊 分块
- jQuery Autocomplete插件
- SpringBoot上传
- 2017多校训练Contest4: 1003 Counting Divisors hdu6069
- 字符串NSString
- 线段树的建立和查找
- Kotlin 初窥门径[2]-流程控制
- 随机验证码
- 人脸识别
- Servlet基础(5)
- HashMap实现原理分析(详解)
- nodeJS express框架搭建web服务器
- hdu 6149 Valley Numer II(状压+ 枚举)
- CSS中z-index详解