题意: 思路: 用三元组(i, l, r)表示右端点为i,左端点在[l, r]之间和最大的区间([l, r]保证是对于i可行右端点区间的一个子区间),我们用堆维护一些这样的三元组. 堆中初始的元素为每个i,并且[l, r]为这个i可行左端点的区间. 假如某次最大值为(i, l, r),并且j为那个和最大区间的左端点,那么需要往堆中加入两个三元组(i, l, j-1)和(i, j+1, r). 对于一个三元组,计算对应最大和的问题实际就是一个RMQ问题,可以通过Sparse Table在O(Nlo…