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); }
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); } }