Esempio n. 1
0
        public long Query(long l, long r)
        {
            if (r <= l)
            {
                return(long.MinValue);
            }
            var shiftbit = Max(0, LIB_BitUtil.MSB(r - l - 1) - 1);
            var tgtdat   = dat[shiftbit];

            return(Max(tgtdat[l], tgtdat[r - (1 << shiftbit)]));
        }
Esempio n. 2
0
        public LIB_SparseTableMax(IEnumerable <long> initArray)
        {
            var ary = initArray.ToArray();
            var n   = ary.Length;

            dat    = new long[Max(1, LIB_BitUtil.MSB(n - 1))][];
            dat[0] = ary;
            var len = 1;

            for (var k = 1; k < dat.Length; ++k)
            {
                var orgdat = dat[k - 1];
                var tgtdat = dat[k] = new long[n];
                for (var i = 0; i < n - len; ++i)
                {
                    tgtdat[i] = Max(orgdat[i], orgdat[i + len]);
                }
                len <<= 1;
            }
        }