专栏文章

题解:CF1758F Decent Division

CF1758F题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mind6wl5
此快照首次捕获于
2025/12/02 00:29
3 个月前
此快照最后确认于
2025/12/02 00:29
3 个月前
查看原文
这个题感觉不是很难。
分类讨论操作:
  1. 1100。考虑本来包含 ii 这个位置的区间 [l,r][l,r]。令 11 权值为 1100 权值为 1-1s(l,r)s(l,r) 表示 [l,r][l,r] 区间权值和。则本来有 s(l,r)=0s(l,r)=0,所以 s(l,i1)+s(i+1,r)=1s(l,i-1)+s(i+1,r)=-1。所以 s(l,i1)s(l,i-1)s(i+1,r)s(i+1,r) 中总有一个是负数。不妨令其为 s(l,i1)s(l,i-1),则找到第一个位置 xi1x \leq i - 1 满足 s(l,x)=1s(l,x)=-1,显然 Sx=0S_x=0,将 [l,x)[l,x) 划分出来。此时 s(x+1,r)=1s(x+1,r)=1,故 s(x+1,i1)+s(i+1,r)=0s(x+1,i-1)+s(i+1,r)=0。若两者都为 00 则直接划分,否则一侧有负数同理找到第一个前缀和为 1-1 的位置划分,那么剩下这一段本来的和就是 22,将 11 变为 00 后和正好变为 00,恰好符合限制。
  2. 0011。若本来这个 00 在某段内,则变为 11 后段的总和从 00 变为了 22。此时考虑右端点的下一个字符,若是 00 则可将其纳入段内,否则将这段与原段合并。不断往后做即可。另一方面,若本来 00 不在段内,若下一个字符也是 00,操作后 1010 就是合法段,否则类似之前的继续往后合并段即可。
整个过程不难用线段树维护。复杂度 O(nlogn)O(n \log n)。操作次数线性。

评论

0 条评论,欢迎与作者交流。

正在加载评论...