CF1896D Ones and Twos 题解

发布时间 2023-12-01 17:01:58作者: ShawyYum

题意:

思路:

  • 先考虑不带修:

如果长度为 $ n $ 的序列 $ a $ 中无 $ 1 $ ,当且仅当 $ 2 \le s \le sum(1,n) $ 时,一定有解;否则,一定无解。

通过 $ set $ 维护序列 $ a $ 中每个 $ 1 $ 的位置,找到最靠左的 $ 1 $ 的位置 $ l $ 以及最靠右的 $ 1 $ 的位置 $ r $ 。

对于区间 $ [l,n] $ ,由于 $ a_i $ ∈ \(\{\) \(1,2\) \(\}\) ,那么该区间的子串所能取到的元素总和为 $ [1,sum(l,n)] $ 。当$ 1 \le s \le sum(l,n) $ 时,一定有解。

对于区间 $ [1,r] $ ,由于 $ a_i $ ∈ \(\{\) \(1,2\) \(\}\) ,那么该区间的子串所能取到的元素总和为 $ [1,sum(1,r)] $ 。当 $ 1 \le s \le sum(1,r) $ 时,一定有解。

当 $ sum(l,n) \ge sum(1,r) $ 且 $ s > sum(l,n) $ 时,当且仅当 $ s $ $ = $ \(sum(l,n)\) \((\) \(mod\) \(2\) \()\) 且 $ s \le sum(1,n) $ 时,一定有解;否则,一定无解。

当 $ sum(1,r) \ge sum(l,n) $ 且 $ s > sum(1,r) $ 时,当且仅当 $ s $ $ = $ \(sum(1,r)\) \((\) \(mod\) \(2\) \()\) 且 $ s \le sum(1,n) $ 时,一定有解;否则,一定无解。

  • 考虑带修:

通过 $ set $ 维护序列 $ a $ 中每个 $ 1 $ 的位置即可。