首页 > 代码库 > 二维线段树模式

二维线段树模式

 

 1 #include<iostream> 2 using namespace std; 3 const int N=3000; 4 struct SubNode 5 { 6     int left,right; 7     int value; 8 } 9 struct Node10 {11     int left,right;12     SubNode subnode[N];13     int value;14 }15 Node node[N];16 int left,right;//要使用区间的左右端点 17 void Sub_build(int l,int r,int i,int t)//头节点的i=0; 18 {19     node[t].subnode[i].left=l;20     node[t].subnode[i].right=r;21     node[t].subnode[i].value=http://www.mamicode.com/0;22     if(l==r)return;//以点作为基本单位,每个叶子是一个点 23     //if(l+1==r)return//以边作为基本单位,每个叶子是一条长度为1的边24     int mid=(l+r)>>1;25     Sub_build(l,mid,2*i+1,t);26     Sub_build(mid+1,r,2*i+2,t);27     //Sub_build(mid, r,2*i+2,t);28 }29 void Main_build(int l,int r,int i)//i从零开始 30 {31     node[i].left=l;32     node[i].right=r;33     node[i].value=http://www.mamicode.com/0;//相应的值 34     Sub_build(left,right,0,i);35     if(l==r)return;36     if(l+1==r)return;37     int mid=(l+r)>>1;38     Main_build(l,mid,2*i+1);39     Main_build(mid+1,r,2*i+2);40     //Main_build(mid,r,2*i+2);41 }42 void query(int l,int r,int left,int right,int i)43 {44     //按照条件寻找相应的值 45     46 }