c - Is there any faster implementation for this Splay Tree range sum? -
i have coded splay tree. nodes represented this.
struct node{ node *l; /// left node node *r; /// right node int v; /// value };
now, need know summation of numbers in tree within range. this, implemented following function named summation.
void summation(node *r, int st, int ed) { if(!r) return; if(r->v < st){ /// should not call left side summation(r->r, st, ed); } else if(r->v > ed){ /// should not call right side summation(r->l, st, ed); } else{ /// should call both side ret+=r->v; summation(r->l, st, ed); summation(r->r, st, ed); } return; }
ret
global int
variable initialized 0
before calling summation
function. 2 parameters st
& ed
defines range (inclusive).
the summation
function works @ complexity of o(n). can suggest faster implementation this??
this splay tree implementation did time ago , tested against spoj evaluation system (written in c++) :
this tree implementation supports u asking (range sum in o(log(n))
.
the key idea here use split , merge, extract subtree covering range. additionally each node contains field sum
, sum of keys in subtree. sum
field lazily evaluated , relayed during split operation (along splitting line), allows not go deeper levels not required calculated.
Comments
Post a Comment