#6572. 圣诞老人的灯(Светилките на Дедо Мраз)
圣诞老人的灯(Светилките на Дедо Мраз)
题目名称:圣诞老人的灯(Светилките на Дедо Мраз)
来源:马其顿编程竞赛(Macedonian Programming Contests)
题目背景
三个小矮人正在装饰圣诞老人的院子。
- 马丁(Martin):首先放置了 盏灯,每盏灯的状态为 (1 表示开,0 表示关)。
- 阿尔廷(Altin):想要更多的灯亮着。他会执行操作
+ A B,将区间 内的所有灯全部开启。 - 蒂雅娜(Tijana):想要更少的灯亮着。她会执行操作
- A B,将区间 内的所有灯全部关闭。 - 马丁的任务:他关心某个特定区间内亮着的灯的总数。他会提出问题
? A B。
你的任务是模拟这些操作并回答马丁的提问。
输入格式
- 第一行:两个整数 (灯的数量,)和 (操作次数,)。
- 第二行: 个数字(0 或 1),表示灯的初始状态。
- 接下来的 行:操作指令。
+ A B:将区间 内的灯全部设为 1。- A B:将区间 内的灯全部设为 0。? A B:查询区间 内状态为 1 的灯的数量。
输出格式
- 对每个
?查询,输出一个整数。
限制要求
- 时间限制:1.0 秒
- 内存限制:64 MB(注意:线段树需要合理分配空间,避免超限)
样例分析
输入:
7 6
0 0 0 1 1 1 1
? 2 6
- 5 6
? 3 7
+ 2 5
- 3 6
? 1 4
执行过程:
- 初始状态:
[0, 0, 0, 1, 1, 1, 1] ? 2 6:区间[2, 6]有 3 个 1。输出 3。- 5 6:状态变为[0, 0, 0, 1, 0, 0, 1]? 3 7:区间[3, 7]有 2 个 1(第 4 和第 7 位)。输出 2。+ 2 5:状态变为[0, 1, 1, 1, 1, 0, 1]- 3 6:状态变为[0, 1, 0, 0, 0, 0, 1]? 1 4:区间[1, 4]只有第 2 位是 1。输出 1。
版权信息:整理自马其顿青少年编程竞赛(Macedonian Programming Contests)。版权归原赛事组委会所有。