Update 4/13 - Added support for single value ranges.
What data structure do you use when you need to efficiently check if a number is within a large set of ranges?
If you require that the ranges do not overlap, then it is simple to keep a balanced binary tree of the ranges. Finding if a number is within one of those ranges should only take O(log n) to find. Below is an implementation of a RangedSet that uses a standard .NET SortedSet to store the ranges.
IRangeSet Interface
public interface IRangeSet<in T> where T : IComparable
{
void AddRange(T min, T max);
bool Contains(T findValue);
}