RMQ(线段树实现)
来源:互联网 发布:caffe 图像分割代码 编辑:程序博客网 时间:2024/05/17 16:45
T_T第一个线段树程序,还没A过题,不过也很感动, 先贴出来
//下标从0开始,输入-1 -1 结束.求每一段区间之间的最大值。
#include <cstdio>#include <cstdlib>typedef struct Treenode{ int ld, rd; struct Treenode *lc, *rc; int key;}node;int mymax(int a, int b){ return a > b ? a : b;}node* buildtree(int a, int b){ node *p = (node *)malloc(sizeof(node)); p -> ld = a; p -> rd = b; p -> key = -1; if (a == b){ return p; } p -> lc = buildtree(a, (a + b) / 2); p -> rc = buildtree((a + b) / 2 + 1, b); return p;}void insert(node *T, int pos, int key){ if (T -> ld == T -> rd){ T -> key = key; return ; } if (pos <= (T -> ld + T -> rd) / 2){ insert(T -> lc, pos, key); } else{ insert(T -> rc, pos, key); } T -> key = mymax(T -> lc -> key, T -> rc -> key);}int search(node *T, int a, int b){ int res = -999999999; if (a <= T -> ld && T -> rd <= b){ return T -> key; } if (a <= (T -> ld + T -> rd) / 2){ res = mymax(search(T -> lc, a, b), res); } if (b > (T -> ld + T -> rd) / 2){ res = mymax(search(T -> rc, a, b), res); } return res;}int main(void){ int arr[11] = {1, 3, 646, 34, 20, 30 , 60 , 36, 892, 1, -1}; int left, right; int i, j; node *linetree = buildtree(0, 10); for (i = 0; i < 11; i++){ insert(linetree, i, arr[i]); } while (scanf("%d%d", &left, &right), left != -1 || right != -1){ printf("%d -- %d: %d\n", left, right, search(linetree, left, right)); } return 0;}
- RMQ(线段树实现)
- poj3264(RMQ问题的线段树实现方法)
- RMQ线段树(poj3264)
- 169_线段树实现RMQ
- UVA12299 - RMQ with Shifts(线段树)
- poj 3264(RMQ+线段树)
- bzoj 3339: Rmq Problem(线段树)
- [BZOJ3339]Rmq Problem(离线+线段树)
- CSU 1809 Parenthesis(RMQ||线段树)
- RMQ区间最值(线段树)
- poj3368(线段树,RMQ)
- 线段树/RMQ问题
- 线段树RMQ
- VJ16216/RMQ/线段树
- 线段树求RMQ
- 线段树 Circular RMQ
- 线段树和rmq
- 快速查询区间最值——RMQ算法(线段树实现代码)
- 横空出世,席卷互联网--评微软等公司数据结构和算法面试100题
- 11个帮你优化网站的 .htaccess 片段
- 80. Barking dogs seldom bite. 吠犬不咬人
- 占空比
- 串口程序接收数据一段时间后出现乱码
- RMQ(线段树实现)
- C#解决串口通信中接收数据时延迟处理与缓存处理的方法
- session
- C#利用ICSharpCode.SharpZipLib.dll压缩文件和解压文件
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 坐标旋转变换公式的推导
- C#中判断字符串是否由数字组成
- C语言字符串函数大全
- jQuery方法大全