丽洁姐的题目,不错不错。
传送门
题解
这题还是挺好玩的。
首先可以二分枚举答案。设当前枚举到的答案为$mid$,那么就把大于等于当前答案的数标为1,小于的标为-1。如果两个端点分别在指定区间内的加和最大的区间的加和大于等于0,那么当前二分到的值可以再大一些,否则就应该小一些。
由于最后的区间必然包括$[b+1,c-1]$,所以需要求出区间$[a,b]$的最大后缀和以及区间$[c,d]$的最大前缀和。
先对原序列离散化,这样最后可能二分到的答案就只剩下$n$个。然以后对于每一个可能二分到的答案,将以它为基准构造出的由1和-1组成的序列预处理出来,用线段树就可以维护一个区间的加和、最大前缀和、最大后缀和。但是这样复杂度是爆炸的。所以可以先排序,然后由于每次按顺序修改基准数只会将一个位置的值由1改为-1,所以用主席树维护就好了。
原序列中可能有相同元数字,注意细节即可。
代码
1 |
|