题意:
思路:
- 先考虑不带修:
如果长度为 $ 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 $ 的位置即可。
标签:CF1896D,le,题解,sum,当且,区间,Ones,一定,有解 From: https://www.cnblogs.com/ShawyYum/p/17870467.html