Pudding Monsters 题解

题面

给定一个数组,求有多少个区间使得区间内的数是连续一段。

从连续一段下手,连续 \(x\) 个数必然有 \(x-1\) 对相邻的数,相邻对数记为 \(cnt\),区间长度为 \(x\),满足连续的充要条件是 \(x-cnt=1\),因为这个区间长度必然大于它的相邻对数,所以只要维护\(x-cnt\) 最小值即可。

维护以 \(i\) 开头的 \(x-cnt\),拍到线段树上。\(vis\) 表示是否已经激活,如果激活则表示位置,每次 \(a_i\),区间加 \([1,i]\)\(x\) 增加),(如果激活)区间减 \([1,vis[a[i]+1]]\)\([1,vis[a[i]-1]]\),维护区间最小值和个数。

posted @ 2024-02-27 14:34  point_fish  阅读(13)  评论(0)    收藏  举报