#2077. 徐老师的回文树节点

徐老师的回文树节点

题目描述

徐老师有一棵完全二叉树,这棵树一共有 nn 个节点,编号为 1n1 \sim n,每个节点上有一个小写字母

其中根节点编号是 11ii 节点的左孩子是 i2i * 2,右孩子是 i2+1i * 2 + 1

现在徐老师提出了一个问题,对于编号为 ii 的节点,如果它以及它所有子树上的字母能够组成一个回文字符串,那么徐老师就认为这个节点是 回文树节点

徐老师的算法水平不高,所以他认为,只要子树上的字母能够在任意排列的情况下成为回文字符串,那么就可以了

现在徐老师想知道这棵树有几个 回文树节点

但是石老师又给徐老师加了一个难题,他想让这道题变成一个动态的题目——增加多次修改操作

所以接下来石老师会给出 qq 次修改,每次修改一个节点编号为 xx 的节点,将这个节点上的字母修改为 cc

在每次修改以后,石老师希望知道现在这棵树上有多少个 回文树节点

P.S. 回文字符串是指从左往右念和从右往左念一样的字符串,比如 abcba,aaeebeeaa,xxyyxx

输入格式

输入第一行包含两个正整数 n,qn,q,表示节点数量和操作次数。

接下来一行一个长度为 nn 的字符串,第 ii 个字符表示第 ii 个节点上的初始字母。

接下来 qq 行,每行一个正整数 xx 一个字符 cc,表示将节点 xx 上的字母修改为 cc

输出格式

输出第一行一个整数表示一开始这棵树有几个 回文树节点

接下来 qq 行,每行表示在进行石老师要求的修改操作后,现在这棵树有几个 回文树节点

数据范围

对于 30%30\% 的数据,满足 1n,q201 \leq n,q \leq 20

对于 70%70\% 的数据,满足 1n,q10001 \leq n,q \leq 1000

对于 100%100\% 的数据,满足 1n,q1000001 \leq n,q \leq 100000

输入样例

4 2
aabc
1 b
2 c

输出样例

2
2
4

样例解释

这棵树一开始是这样的:

      a
     / \
    a   b
   /
  c

所以一开始只有 3,43,4 两个节点是 回文树节点

  1. 修改 11 号节点为 bb
      b
     / \
    a   b
   /
  c

依旧只有 3,43,4 两个节点是 回文树节点

  1. 修改 22 号节点为 cc
      b
     / \
    c   b
   /
  c

此时 1,2,3,41,2,3,4 节点都是 回文树节点 11 号节点的子树可以构成 bccbbccb 这个回文字符串 22 号节点的子树可以构成 cccc 这个回文字符串 33 号节点的子树可以构成 cc 这个回文字符串 44 号节点的子树可以构成 bb 这个回文字符串