我一直在试图理解范围树有一段时间了,但我仍然无法理解这一点。
可有人将其与实施给我解释一下,因为我想用它来解决2D RMQ,我知道段树,我的老师告诉我,树的范围类似于2D段树,但我怎么也想不到的空间复杂性可以是小于n ^ 2等二维线段树。
我不知道这一点,但它是真实的,它就像归并排序,所以内存将小于使用N ^ 2矢量
void merge(vector<int> &res,vector<int> &a,vector<int> &b)
{
int la = 0;
int lb = 0;
int sa = SIZE(a);
int sb = SIZE(b);
while(la < sa || lb < sb)
{
if (la >= sa) {res.pb(b[lb]);lb++;}
else if (lb >= sb) {res.pb(a[la]);la++;}
else
{
if (a[la] < b[lb]) {res.pb(a[la]);la++;}
else {res.pb(b[lb]);lb++;}
}
}
}
void build(int n,int l,int r)
{
if (l == r)
{
rtree[n].pb(ar[l]);
return;
}
int m = (l+r)/2;
build(2*n,l,m);
build(2*n+1,m+1,r);
merge(rtree[n],rtree[2*n],rtree[2*n+1]);
}
谢谢 :)