前缀和专题
基本知识
前缀和的基本知识是sum[i]=sum[i-1]+a[i],这个公式有一个基本要点:需要继承
比如说0001111000,比如说求前i个位置的0的个数,因为中间1的出现,虽然0的个数没有增加,但是需要继承,sum[i]=sum[i-1]
前缀和的作用是对于一个静态的序列,如果询问[L,R]之间的和,那么可以优化到O(q),暴力的话是O(qn),本质上是用空间换时间;
1、平均数
前缀和的裸题,非常简单
2、有序01序列
对于每个位置,维护前面1的个数,维护后面0的个数,接着枚举每个位置
\[ans=min(ans,sum1[i-1]+sum0[n]-sum0[i])
\]
3、三元组
最终状态是形成1 2 3这样的序列,所以我们可以枚举2,找到前面1的前缀和,找到后面3的前缀和,根据乘法原理,就是这个位置的2对答案的贡献
4、石头剪刀布
因为出的序列是一段石头,一段剪刀,一段布,就是把一条线段分成三个部分,有多少种分法?所以我们可以枚举(i,j),i表示石头的终点,j表示剪刀的终点,这样就可以把前一段剪刀的前缀和求出来,这是第一段赢的数量,可以把前一段剪刀的前缀和求出来,这是第一段输的数量,两者相减就是这一段最终的和