题意
做法一
两维分别维护
考虑求前缀和(s_i),有贡献的条件就是(s_{i-1} imes s_i<0)
每次都是后缀加上一个值,考虑维护一个集合,集合内存二元组((min(s_{i-1,s_i}),max(s_{i-1},s_i))),集合有个tag,表示集合内的值都加上某个值
当集合加入元素的时候,要减去tag
考虑当tag加上delta时的贡献,考虑计算增量,ans-集合内tag的贡献+集合内tag'的贡献,贡献的统计形似(min(s_{i-1,s_i})<-tag,max(s_{i-1},s_i)>-tag),线段树维护即可
做法二
不统计(s_{i-1} imes s_i<0),统计补集,即(min(s_{i-1},s_i)le 0~or~max(s_{i-1},s_i)ge 0)(题目保证不会出现(s_i=0)的情况)
即我们在做:
插入一个数
删除一个数
将集合内的数加上一个值
查询连续值域内的个数