$51nod$ 最后的机会
$Description$
$Solution$
首先可以套路的将把元音字母变成 $-1$ ,辅音字母变成 $2$ ,然后做一遍前缀和,这样只要 $sum_j - sum_{i - 1} >= 0$ 即可判断该字符串满足条件。
然后考虑如何优化这个枚举找最大的 $j - i + 1$ 的过程。
可以发现对于一个 $i$ ,我们只关心距离他最远的满足条件的 $j$ ,所以我们只要每次取出这个 $j$ ,然后对最终长度取 $MAX$ 即可。
如果暴力的取 $j$ ,复杂度是 $\Theta(n^2)$ 的,对于 $2 \times 10^5$ 的数据范围显然不能接受。
我们发现,如果只用取出一个 $sum_j$ ,使他尽可能大,那么我们可以用线段树来优化这个查找的过程。
可以构建一棵维护区间最大值的线段树,然后在线段树上从右往左找第一个满足条件的端点,找到即退出。
注意题目要求最大,所以从右往左找。
$Code:$
1 |
|