摘要: 线段树的模板题,另外此题还能用SparseTable解。#include struct CowRange{ int l,u; CowRange *left,*right; int max,min; }; CowRange* BuildInTree(int l, int u, int *height){ CowRange *root = new CowRange(); root->l = l;root->u = u; if(l!=u){ //递归构建左右子树,并初始化max和min值 root->left = Build... 阅读全文
posted @ 2012-10-18 21:23 moonswap 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 线段树(Interval Tree),也叫区间树。它在各个节点保存一个区间(即“子数组”),适用于和区间统计有关的问题。比如某些数据可以按区间进行划分,按区间动态进行修改,而且还需要按区间多次进行查询,那么使用线段树可以达到较快查询速度。实际可应用于例如RMQ,线段求长,矩形交,矩形并等,它基本能保证每个操作的复杂度为O(log n)。一、基本结构 对于一个[0 , N-1]的序列,它对应的线段树的根节点表示区间[0 , N-1],即所有N个数所组成的一个区间,然后,把区间分成两半,分别由左右子树表示。它的左右子树可以有多种表示方法:方案一:左结点代表的区间为[a , (a + b) / 2] 阅读全文
posted @ 2012-10-18 14:24 moonswap 阅读(569) 评论(0) 推荐(0) 编辑