func (d *T) Get(n Span) []z.Lit {
	s := &d.spans[n]
	return d.D[s.start:s.end]
}
Get returns a slice backed by the contiguous storage
in `d` containing the lits represented by `n`.
package lits
import (
	"fmt"
	"sort"
	"github.com/go-air/gini/z"
)
type T struct {
	D     []z.Lit
	spans []mspan
	rmq   []Span
	free  []Span
	nFree int  
}
type mspan struct {
	start, end int
}
func (m *mspan) String() string {
	return fmt.Sprintf("[%d..%d)", m.start, m.end)
}
type Span int
func (s *mspan) size() int {
	return s.end - s.start
}
func New() *T {
	d := &T{D: make([]z.Lit, 1, 768), spans: make([]mspan, 1, 128)}
	return d
}
func (d *T) Put(ms []z.Lit) Span {
	start := len(d.D)
	d.D = append(d.D, ms...)
	end := len(d.D)
	sp, n := d.mspan()
	sp.start = start
	sp.end = end
	return n
}