P8600&CF526F(双倍经验)

看P8600题面比较易懂
这种问区间的题目,一般都是枚举右端点,找有多少个符合条件的左端点。然后容易发现一个性质,如果一个区间最大数的下标减区间最小数的下标+1等于区间长度,那么这个区间就是一个连号。所以我们可以动态维护\(max(a_{l},...,a_{r})-min(a_{l},...,a_{r})+1=len\)
\(max(a_{l},...,a_{r})-min(a_{l},...,a_{r})+1-len=0\)
利用扫描线,发现每个左端点都对应一个值,那么我们可以利用线段树维护len了。但怎么维护\(max(a_{l},...,a_{r})-max(a_{l},...,a_{r})\)聪明的小朋友已经开始吉司机了,但这题可以利用单调栈来解决。因为区间的max单调不增,min单调不减,所以在做单调栈的同时用线段树区间加减即可。

posted @ 2024-07-19 08:22  wuhupai  阅读(6)  评论(0编辑  收藏  举报