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]]\),维护区间最小值和个数。

浙公网安备 33010602011771号