data structures - Segment Trees in Solving Stabbing Queries -
where possible find reference implementation of segment trees in solving stabbing problem? stabbing problem asks return intervals (from predefined set of m intervals of form [a, b], 1 <= <= b <= n n given) containing given point q.
corner case: intervals of 1 point [a, a].
until managed following code, surely not work , can't find bug:
int n, m, x[100005], y[100005], q; list< int > segm[200005]; //search q in segment tree void segmquery(int node, int left, int right) { (list<int>::iterator = segm[node].begin(); != segm[node].end(); i++) { //process segment } if (left < right) { int middle = left + (right - left) / 2; if (q <= middle) segmquery(2 * node, left, middle); if (q > middle) segmquery(2 * node + 1, middle + 1, right); } } //add q-th segment tree //segment denoted x[q], y[q] void segmadd(int node, int left, int right) { if ((x[q] <= left) && (right <= y[q])) segm[node].push_back(q); else { int middle = left + (right - left) / 2; if (x[q] <= middle) segmadd(2 * node, left, middle); if (y[q] > middle) segmadd(2 * node + 1, middle + 1, right); } }
Comments
Post a Comment