zkw樹
https://sshwy.gitee.io/2018/10/01/55406/
https://www.cnblogs.com/Judge/p/9514862.html
https://blog.csdn.net/DREAM_yao/article/details/108801613
#include<vector>
#include<iostream>
#include<math.h>
#include<limits.h>
using namespace std;
class segmenttree
{
struct node
{
int max;
bool lazy;
node(int _max, bool _lazy):max(_max),lazy(_lazy){};
};
vector<node>tree;
int start;
public:
int query(int left, int right);
segmenttree(vector<int>&array)
{
int h = (int)ceil(log(array.size()/log(2))) + 1;///<線段樹的曾數
start = (1<<(h-1)) - 1;///<葉節點的開始
int n = (1<<h)-1;///<線段樹的節點個數
vector<node>a(n,node(-1,false));
tree = a;
for(size_t i=0;i<array.size();++i)
tree[start+i]=node(array[i], true);
for(int i=start>>1;; i>>=1)///<樹的曾數
{
for(int j=0; j<i*2+1; ++j)///<橫行
{
node leftNode = tree[2*(i+j)+1];
node rightNode = tree[2*(i+j)+2];
if(leftNode.lazy && rightNode.lazy)
tree[i+j] = node(max(leftNode.max, rightNode.max), true);
else if(leftNode.lazy && !rightNode.lazy)
tree[i+j] = leftNode;
}
if(0==i)///<i=0得進來一次
break;
}
return;
}
};
int segmenttree::query(int left, int right)
{
int mmax = max(tree[left].max, tree[right].max);
left+=start;
right+=start;
for(;;left=(left-1)>>1,right=(right-1)>>1)
{ if(0==left)
{
mmax = max(mmax, tree[left].max);
break;
}
///<對於left而言,右子節點在區間內。right的左子節點在區間內
if(1==left%2) ///<奇數是左子節點,偶數是右子節點
mmax = max(mmax, tree[left+1].max);
if(0==right%2)
mmax = max(mmax, tree[right-1].max);
}
return mmax;
}
int main(void)
{
vector<int>a={1,4,6,8,4,0,9};
segmenttree b(a);
cout<<b.query(1,6)<<endl;
return 0;
}
相關文章
- zkw 線段樹-原理及其擴充套件套件
- 樹套樹
- BST(二叉搜尋樹)、AVL樹、紅黑樹、2-3樹、B樹、B+樹、LSM樹、Radix樹比較
- 樹:基本樹形
- Trie樹,字典樹
- 多路查詢樹(2-3 樹、2-3-4 樹、B 樹、B+ 樹)
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 淺談樹形結構的特性和應用(上):多叉樹,紅黑樹,堆,Trie樹,B樹,B+樹...
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- P3380 【模板】二逼平衡樹(樹套樹)
- 資料結構之樹( 線段樹,字典樹)資料結構
- 樹上染色(樹形dp)
- 樹
- 資料結構之MySQL獨愛B+樹(二叉樹、AVL樹、紅黑樹、B樹對比)資料結構MySql二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 雜湊,二叉樹,紅黑樹,B樹,B+樹,LSM樹等資料結構做索引比較二叉樹資料結構索引
- 樹套樹從入門到去世
- 字典樹(字首樹)簡單實現
- 樹和二叉樹簡介二叉樹
- Note - 樹分治(點分治、點分樹)
- Chapter 3 樹與二叉樹APT二叉樹
- 基環樹和笛卡爾樹
- n叉樹vs二叉樹二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 貓樹
- 樹堆
- DFS樹
- 字首樹
- 主席樹
- 字典樹
- 左偏樹
- 平衡樹
- 樹論
- 小樹
- 失配樹
- 樹上的等差數列 [樹形dp]
- [樹形dp][HAOI2015]樹上染色