C0215 [APIO2019-C]路灯

内存限制:512 MB 时间限制:5000 ms

题目描述

一辆自动驾驶的出租车正在 Innopolis 的街道上行驶。该街道上有 $n+1$ 个停车站点,它们将街道划分成了 $n$ 条路段。每一路段都拥有一个路灯。当第 $i$ 个路灯亮起,它将照亮连接第 $i$ 与第 $i+1$ 个站点的路段。否则这条路段将是黑暗的。

安全起见,出租车只能在被照亮的路段上行驶。换言之,出租车能从站点 $a$ 出发到达站点 $b(a<b)$ 的条件是:连接站点 $a$ 与 $a+1$,$a+1$ 与 $a+2$,……,$b-1$ 与 $b$ 的路段都被照亮。

在经过一些意外故障或修理之后,街道上的路灯可能是亮起的,也可能是熄灭的。

现在给定 $0$ 时刻时,街道上路灯的初始状态。之后 $1,2,...,q$ 时刻,每时刻会发生下列两种事件之一:

  • toggle $i$:切换第个路灯的状态。具体地说,若路灯原来亮起,则现在将熄灭;若路灯原来熄灭,则现在将亮起。
  • query $a$ $b$:出租车部门的负责人想知道,从 $0$ 时刻起到当前时刻,有多少个时刻满足:出租车能够从站点 $a$ 出发到达站点 $b$。

请你帮助出租车部门的负责人回答他们的问题。

输入格式

第一行包含两个整数 $n$ 和 $q$——表示路灯的数量与时刻数。

第二行包含一个字符串 $s$ 表示路灯的初始状态,$s_i$ 为1表示第 $i$ 个路灯初始时亮起;$s_i$ 为0表示第 $i$ 个路灯初始时熄灭。

接下来 $q$ 行每行描述一个时刻的事件。第 $i$ 行描述时刻所发生的事件:

  • toggle $i$:该时刻切换了第个路灯的状态。
  • query $a$ $b$:计算从 $0$ 时刻起到该时刻,共有多少个时刻满足:出租车能从站点 $a$ 出发到达站点 $b$。

至少有一个时刻的事件是 query。

输出

对于每个 query 的事件,输出一行单个整数,表示该问题的答案。

样例

样例输入 1

5 7 11011 query 1 2 query 1 2 query 1 6 query 3 4 toggle 3 query 3 4 query 1 6

样例输出 1

1 2 0 0 1 2

提示

【样例说明】

在这组样例中

屏幕快照 2019-07-10 下午2.12.48.png

【数据范围与提示】

对于全部数据,$1 \le n,q \le 3 \times 10^5,|s|=n,1 \le i \le n, 1 \le a < b \le n+1$。

详细子任务限制与分值如下表。(comet 不支持APIO评分方式)

屏幕快照 2019-07-10 下午2.14.26.png

子任务 1:测试点 2-8

子任务 2:测试点 9-16

子任务 3:测试点 17-29

子任务 4:测试点 30-45

子任务 5:测试点 46-55