题解 | #[CQOI2009]中位数图#

[CQOI2009]中位数图

https://ac.nowcoder.com/acm/problem/19913

笔记


只需要关心其他数字比中位数大还是小,具体数值并不重要。所以可以把原数列转化,中位数b记为0,比b大的数记为1,比b小的数记为-1。此时符合条件的子序列里所有值的和为0(并且里面有一个元素本身为0)

从b向左求后缀和,从b向右求前缀


我们可以以0作为起点(只有一个0)分别看他的左边和右边,统计从他开始的左边后缀和为i的个数,和右他开始的边前缀和为i的个数,显然当左边后缀和为x的时候,右边的前缀和要为-x才能保证区间和为0,统计即可。

eg:化成0,1,-1之后的数列为:

-1 1 -1 -1 0 1 1 1

从0开始左边的后缀和为:

-2 -1 -2 -1

从0开始右边的前缀和为:

1 2 3

当前缀和为1的时候左边有两个-1,所以对答案贡献2,当前缀和为2的时候左边有两个-2,对答案也贡献2,当前缀和为3的时候左边没有-1,对答案没有贡献。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务