啥?线段树?还费用流?
传送门
题解
首先可以考虑一个贪心,每次取询问区间内权值和最大的子段,然后把这个子段标记上,该次询问中不能再取。
但是这个想法并不对,比如序列$3,-1,3$,可以取至多2个子段。由于第一次会取权值最大的子段$[1,3]$,然后就没有子段可以取了。而实际上取$[1,1]$和$[3,3]$的话答案会更优。
然后不难联想到,在求最大流的时候,我们通过建反向弧的方式来保证了正确性。
所以对于这题,可以在取了一个子段之后,将改子段取反,之后还能再取,来保证正确性。
而取反和取最大值的操作都可以通过线段树来维护。
时间复杂度$O(n\log n+mk\log n)$。
代码
1 |
|