P14268 [ROI 2015 Day2] 路灯

题目背景

**译自 [ROI 2015](https://neerc.ifmo.ru/school/archive/2014-2015.html) Day2 T3.** ***[Фонари](https://neerc.ifmo.ru/school/archive/2014-2015/ru-olymp-roi-2015-day2.pdf)***

题目描述

在“水下运河”街上共有 $n$ 盏路灯,沿街从 1 到 $n$ 编号。连续的一段路灯称为一个**区段**。因此,总的区段数量等于 $\frac{n(n+1)}{2}$。如果某个区段内的所有路灯都亮着(即灯泡完好),则称该区段为**正常工作**的。 路灯上可能发生两种类型的事件: 1. 某个区段由于电压波动导致其中所有灯泡同时烧坏; 2. 能源公司选择某个区段,派出维修人员更换该区段内所有烧坏的灯泡,使其恢复正常。 在每次事件发生后,市政$ $府都会要求提交一份报告,说明当前**正常工作的区段数量**。为了提升业绩指标,维修部门在报告中会包含所有**现在正常**或**曾经正常**的区段。 请你编写一个程序,在每次事件之后,计算到目前为止(包括此次事件)**当前正常或曾经正常**的区段数量。

输入格式

第一行包含两个整数 $n$ 和 $q$ —— 分别表示路灯的数量和事件的数量。 第二行包含一个由 $n$ 个字符组成的字符串,仅包含 **0** 和 **1**: - **1** 表示该路灯灯泡完好; - **0** 表示该路灯灯泡已烧坏。 接下来 $q$ 行中,每行包含三个整数 $l_i, r_i, c_i$,表示一次事件: - 若 $c_i = 0$,则编号从 $l_i$ 到 $r_i$(包含两端)的所有路灯灯泡全部烧坏; - 若 $c_i = 1$,则编号从 $l_i$ 到 $r_i$ 的所有灯泡全部更换为新的、完好的灯泡。 保证 $1 \le l_i \le r_i \le n$,且 $c_i$ 仅取值 0 或 1。

输出格式

第一行输出一个整数 —— 初始状态下正常工作的区段数量。接下来输出 $q$ 行,第 $i$ 行输出在第 $i$ 次事件之后,所有**当前正常或曾经正常**的区段数量。

说明/提示

### 数据范围 | 子任务编号 | 分值 | $n$ 范围 | $q$ 范围 | |:--:|:--:|:--:|:--:| | 1 | 17 | $1 \le n \le 50$ | $1 \le q \le 150$ | | 2 | 19 | $1 \le n \le 500$ | $1 \le q \le 250$ | | 3 | 12 | $1 \le n \le 5000$ | $1 \le q \le 1000$ | | 4 | 20 | $1 \le n \le 50\,000$ | $1 \le q \le 1000$ | | 5 | 32 | $1 \le n \le 300\,000$ | $1 \le q \le 300\,000$ |