题解:AT_abc372_c [ABC372C] Count ABC Again

博客内食用更佳

乍一看好像是数据结构

我们结合题目所求内容考虑。对于每次修改,能对答案产生影响的最多只能是当前字符向前和向后延伸 \(2\) 个元素所构成的长为 \(5\) 的子串。

那么我们先 \(\mathcal{O}(n)\) 计算出来初始答案。每次修改的时候,不妨先把 \(i-2\sim i\)\(i-1\sim i+1\)\(i\sim i+2\) 这三个子串的贡献减去,然后直接修改元素,最后重新计算这三个子串的贡献即可。

对于贡献计算的话,因为下标边界的问题,我们可以写一个函数方便处理。如下:

bool ch(int x)
{
	if(x<=0||x+2>n)return 0;
	return s[x]=='A'&&s[x+1]=='B'&&s[x+2]=='C';
}

提交记录

posted @ 2024-09-22 13:05  Redamancy_Lydic  阅读(21)  评论(0编辑  收藏  举报