rt,思路是考虑修改后造成的影响,发现情况很少,于是枚举所有情况,但是 WA 了
/*Code By Manipula*/
#include <bits/stdc++.h>
#define endl '\n'
#define Inf 0x3f3f3f3f
#define ft first
#define sd second
#define lb lower_bound
#define YES printf("YES\n")
#define Yes printf("Yes\n")
#define NO printf("NO\n")
#define No printf("No\n")
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define BUG puts("BUG!")
#define int long long
typedef long long ll;
typedef __int128 _int;
template <typename T> void ckmax(T &x, T y) { x = x > y ? x : y; }
template <typename T> void ckmin(T &x, T y) { x = x < y ? x : y; }
template <typename T> void ckadd(T &x, T A, T p) { x = (x + A) % p; }
template <typename T> void ckmul(T &x, T A, T p) { x = (x * A) % p; }
template <typename T> T max(T x, T y) { return x > y ? x : y; }
template <typename T> T min(T x, T y) { return x < y ? x : y; }
const int N = 2e5 + 7;
char s[N], t[7] = " ABC";
int n, q, ans;
signed main() {
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
scanf("%lld%lld%s", &n, &q, s + 1);
for (int i = 1, l = 1; i <= n; i ++) {
if (s[i] == t[l]) l ++;
else l = 1;
if (l == 4) l = 1, ans ++;
}
while (q --) {
int pos; char ch;
std::cin >> pos >> ch;
if (ch != 'C' && 3 <= pos && s[pos - 2] == 'A' && s[pos - 1] == 'B' && s[pos] == 'C')
ans --;
if (ch != 'B' && 2 <= pos && pos + 1 <= n && s[pos - 1] == 'A' && s[pos + 1] == 'C' && s[pos] == 'B')
ans --;
if (ch != 'A' && pos + 2 <= n && s[pos + 1] == 'B' && s[pos + 2] == 'C' && s[pos] == 'A')
ans --;
if (ch == 'C' && 3 <= pos && s[pos - 2] == 'A' && s[pos - 1] == 'B' && s[pos] != 'C')
ans ++;
if (ch == 'B' && 2 <= pos && pos + 1 <= n && s[pos - 1] == 'A' && s[pos + 1] == 'C' && s[pos] != 'B')
ans ++;
if (ch == 'A' && pos + 2 <= n && s[pos + 1] == 'B' && s[pos + 2] == 'C' && s[pos] != 'A')
ans ++;
s[pos] = ch;
printf("%lld\n", ans);
}
return 0;
}