Example #1
0
            /// <summary>
            /// return the list of intervals containing 'x' in o(log(n) + m) time
            /// (+ o(n log(n) ) preparation time
            /// (where 'm' is the number of interval returned)
            /// </summary>
            /// <param name="x"></param>
            /// <returns>list of intervals containing x</returns>
            public List <Tuple <int, int> > AllIntervalsContaining(int x)
            {
                List <Tuple <int, int> > res;

                if (x < _center || (x == _center && !_endOfIntervalIsIncludedInInterval))
                {
                    res = (_left == null) ? new List <Tuple <int, int> >() : _left.AllIntervalsContaining(x);
                    foreach (var i in _intervalsSortedByStart)
                    {
                        if (i.Item1 > x)
                        {
                            break;
                        }
                        res.Add(i);
                    }
                }
                else
                {
                    res = (_right == null) ? new List <Tuple <int, int> >() : _right.AllIntervalsContaining(x);
                    for (var index = _intervalsSortedByEnd.Count - 1; index >= 0; --index)
                    {
                        var i = _intervalsSortedByEnd[index];
                        if ((i.Item2 < x) || (i.Item2 == x && !_endOfIntervalIsIncludedInInterval))
                        {
                            break;
                        }
                        res.Add(i);
                    }
                }

                return(res);
            }