コード例 #1
0
ファイル: QuestionG.cs プロジェクト: terry-u16/AtCoder
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            var n             = inputStream.ReadInt();
            var heights       = inputStream.ReadIntArray().ToArray();
            var beautifulness = inputStream.ReadLongArray();

            var segtree = new SegmentTree <MaxLong>(Enumerable.Repeat(new MaxLong(0), n + 1).ToArray());

            for (int i = 0; i < heights.Length; i++)
            {
                var current = segtree.Query(..heights[i]);
                segtree[heights[i]] = new MaxLong(current.Value + beautifulness[i]);
            }

            yield return(segtree.Query(..).Value);
        }
コード例 #2
0
ファイル: QuestionE.cs プロジェクト: terry-u16/AtCoder
        public override void Solve(IOManager io)
        {
            var n = io.ReadInt();
            var a = io.ReadIntArray(n);
            var b = io.ReadIntArray(n);
            var c = io.ReadIntArray(n);

            var segtree = new LazySegmentTree <MaxLong, Adder>(n + 1);

            segtree[0] = new MaxLong(b[0]);

            for (int i = 0; i < a.Length; i++)
            {
                segtree.Apply(0, i + 1, new Adder(a[i]));
                var max = segtree.Query(0, i + 1);
            }
        }