洛谷 P3870 [TJOI2009] 开关 题解 线段树

[TJOI2009] 开关

题目描述

现有 n n n 盏灯排成一排,从左到右依次编号为: 1 1 1 2 2 2,……, n n n。然后依次执行 m m m 项操作。

操作分为两种:

  1. 指定一个区间 [ a , b ] [a,b] [a,b],然后改变编号在这个区间内的灯的状态(把开着的灯关上,关着的灯打开);
  2. 指定一个区间 [ a , b ] [a,b] [a,b],要求你输出这个区间内有多少盏灯是打开的。

灯在初始时都是关着的。

输入格式

第一行有两个整数 n n n m m m,分别表示灯的数目和操作的数目。

接下来有 m m m 行,每行有三个整数,依次为: c c c a a a b b b。其中 c c c 表示操作的种类。

  • c c c 的值为 0 0 0 时,表示是第一种操作。
  • c c c 的值为 1 1 1 时,表示是第二种操作。

a a a b b b 则分别表示了操作区间的左右边界。

输出格式

每当遇到第二种操作时,输出一行,包含一个整数,表示此时在查询的区间中打开的灯的数目。

样例 #1

样例输入 #1

4 5
0 1 2
0 2 4
1 2 3
0 2 4
1 1 4

样例输出 #1

1
2

数据规模与约定

对于全部的测试点,保证 2 ≤ n ≤ 1 0 5 2\le n\le 10^5 2n105 1 ≤ m ≤ 1 0 5 1\le m\le 10^5 1m105 1 ≤ a , b ≤ n 1\le a,b\le n 1a,bn c ∈ { 0 , 1 } c\in\{0,1\} c{0,1}

原题

洛谷P3870——传送门

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;template <typename T>
class SegTreeLazyRangeSet
{vector<T> tree, lazy;vector<T> *arr;int n, root, n4, end;void modify(int cl, int cr, int p) // 翻转该结点对应区间所有灯的状态{tree[p] = cr - cl + 1 - tree[p]; // 把该区间的灯状态翻转,相当于:当前开着的灯的数量=灯的总数-上一状态下开着的灯的数量lazy[p] ^= 1;                    // 更新懒标记}void maintain(int cl, int cr, int p) // 懒标记下传{int cm = cl + (cr - cl) / 2;if (cl != cr && lazy[p]){modify(cl, cm, p << 1);         // 下传懒标记给左孩子modify(cm + 1, cr, p << 1 | 1); // 下传懒标记给右孩子lazy[p] = 0;                    // 清空该结点懒标记}}T range_sum(int l, int r, int cl, int cr, int p){if (l <= cl && cr <= r)return tree[p];int m = cl + (cr - cl) / 2;T sum = 0;maintain(cl, cr, p);if (l <= m)sum += range_sum(l, r, cl, m, p * 2);if (r > m)sum += range_sum(l, r, m + 1, cr, p * 2 + 1);return sum;}void range_set(int l, int r, T val, int cl, int cr, int p){if (l <= cl && cr <= r){modify(cl, cr, p);return;}int m = cl + (cr - cl) / 2;maintain(cl, cr, p);if (l <= m)range_set(l, r, val, cl, m, p * 2);if (r > m)range_set(l, r, val, m + 1, cr, p * 2 + 1);tree[p] = tree[p * 2] + tree[p * 2 + 1];}void build(int s, int t, int p){if (s == t){tree[p] = (*arr)[s];return;}int m = s + (t - s) / 2;build(s, m, p * 2);build(m + 1, t, p * 2 + 1);tree[p] = tree[p * 2] + tree[p * 2 + 1];}public:explicit SegTreeLazyRangeSet<T>(vector<T> v){n = v.size();n4 = n * 4;tree = vector<T>(n4, 0);lazy = vector<T>(n4, 0);arr = &v;end = n - 1;root = 1;build(0, end, 1);arr = nullptr;}T range_sum(int l, int r) { return range_sum(l, r, 0, end, root); }void range_set(int l, int r, int val) { range_set(l, r, val, 0, end, root); }
};int main()
{ios::sync_with_stdio(0);cin.tie(0);int n, m;cin >> n >> m;vector<int> a(n, 0);SegTreeLazyRangeSet<int> Stree(a);while (m--){int c, a, b;cin >> c >> a >> b;// 线段树内的下标是从0到n-1,所以需要a--,b--来对应a--;b--;if (c == 0)Stree.range_set(a, b, 0);elsecout << Stree.range_sum(a, b) << '\n';}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从了解到掌握 Spark 计算框架(二)RDD

文章目录 RDD 概述RDD 组成RDD 的作用RDD 算子分类RDD 的创建1.从外部数据源读取2.从已有的集合或数组创建3.从已有的 RDD 进行转换 RDD 常用算子大全转换算子行动算子 RDD 算子综合练习RDD 依赖关系窄依赖宽依赖宽窄依赖算子区分 RDD 血统信息血统信息的作用血统信息的组成代码…

LM2733升压芯片

具有 40V 内部 FET 开关且采用 SOT-23 封装的 LM2733 0.6MHz 和 1.6MHz 升压转换器 外观 参考价格 1 特性 电路原理图 基于LM2733升压电路设计-CSDN博客https://blog.csdn.net/qq_31251431/article/details/107479885 特此记录 anlog 2024年5月31日 高压方案 此方案经过更多…

MySQL -- SQL笔试题相关

1.银行代缴花费bank_bill 字段名描述serno流水号date交易日期accno账号name姓名amount金额brno缴费网点 serno: 一个 BIGINT UNSIGNED 类型的列&#xff0c;作为主键&#xff0c;且不为空。该列是自动增量的&#xff0c;每次插入新行时&#xff0c;都会自动递增生成一个唯一的…

游戏安全 | 一款「安全」的SLG游戏应该是什么样的?

谈到SLG游戏&#xff0c;也许会想到《万国觉醒》&#xff0c;海外上线5个月后&#xff0c;以5400万美元的月流水创造了新的SLG手游海外收入纪录。 谈到SLG游戏&#xff0c;也许会想到《王国纪元》&#xff0c;通过两军对战的方式&#xff0c;以大面积消灭敌人的攻势&#xff0c…

数据库开发-MySQL01

目录 前言 1. MySQL概述 1.1 安装 1.1.1 版本 1.1.2 安装 1.1.3 连接 1.1.4 企业使用方式(了解) 1.2 数据模型 1.3 SQL简介 1.3.1 SQL通用语法 1.3.2 分类 2. 数据库设计-DDL 2.1 项目开发流程 2.2 数据库操作 2.2.1 查询数据库 2.2.2 创建数据库 2.2.3 使用数…

echarts学习:将echats实例代理为响应式对象可能带来的风险

1.起源 最近我在学习如何封装echarts组件&#xff0c;我所参考的其中一篇博客中提到了一个“图表无法显示的问题”。 根据其中的介绍&#xff0c;造成此种问题的原因是因为&#xff0c;使用ref接受了echarts实例&#xff0c;使得echarts实例被代理为了响应式对象&#xff0c;进…

ChatGPT-4o在临床医学日常工作、论文高效撰写与项目申报、数据分析与可视化、机器学习建模中的应用

ChatGPT-4o在临床医学日常工作、论文高效撰写与项目申报、数据分析与可视化、机器学习建模中的应用 2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5&#xff0c;将人工智能的发展推向了一个新的高度。…

独孤思维:副业赚钱根本不需要才华

01 做副业&#xff0c;远远改达不到比拼智慧和才能的地步。 只要你足够勤奋&#xff0c;足够坚持&#xff0c;就一定能拿到结果。 只是时间早晚的问题。 我们经常听到一句话&#xff0c;大多数人&#xff0c;远远达不到拼天赋的地步。 就是这个逻辑。 你看独孤&#xff0…

大数据系统架构师的论文如何写

撰写一篇关于大数据系统架构的论文需要系统地组织和表达复杂的技术和概念&#xff0c;同时展示您的深厚理解和专业知识。以下是一个基本的结构和一些关键要点&#xff0c;可以帮助您开始&#xff1a; 1. 引言 背景: 介绍大数据的重要性及其在现代信息时代的影响。动机: 阐述为…

SpringBoot项目中如何使用Redisson队列详解

一、SpringBoot配置Redisson 1.1 引入依赖 <!--Redisson延迟队列--> <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.1</version> </dependency>1.2 代码配置 Data Co…

AI预测福彩3D采取888=3策略+和值012路一缩定乾坤测试5月29日预测第5弹

今天继续基于8883的大底&#xff0c;使用尽可能少的条件进行缩号&#xff0c;同时&#xff0c;同样准备两套方案&#xff0c;一套是我自己的条件进行缩号&#xff0c;另外一套是8883的大底结合2码不定位奖号预测二次缩水来杀号。好了&#xff0c;直接上结果吧~ 首先&…

云计算面试题

5.20日 java的集合体系结构 它提供了一组接口、类和算法&#xff0c;用于存储和管理对象集合。Java的集合框架包括多个基本接口&#xff0c;如Collection、List、Set、Map等。Collection是集合层次结构的根接口&#xff0c;代表一组对象&#xff1b;List是有序集合&#xff0…

大数据组件doc

1.flink Apache Flink Documentation | Apache Flink 2.kafka Apache Kafka 3.hbase Apache HBase ™ Reference Guide 4.zookeeper ZooKeeper: Because Coordinating Distributed Systems is a Zoo 5.spark Overview - Spark 3.5.1 Documentation 6.idea组件&#xff08;…

Python安装vnpy教程

安装vn.py(一个用于开发量化交易应用的Python库)请确保你已经安装了Python环境 (推荐使用Python3.7或以上版本)。 1. 安装Python和pip 确保你已经安装了Python和pip。如果没有,请先安装。 Windows 下载Python安装包:https://www.python.org/downloads/安装Python时,确…

BUUCTF Crypto RSA详解《1~32》刷题记录

文章目录 一、Crypto1、 一眼就解密2、MD53、Url编码4、看我回旋踢5、摩丝6、password7、变异凯撒8、Quoted-printable9、篱笆墙的影子10、Rabbit11、RSA12、丢失的MD513、Alice与Bob14、大帝的密码武器15、rsarsa16、Windows系统密码17、信息化时代的步伐18、凯撒&#xff1f;…

如何使用视频号下载助手机器人,下载视频号视频

目录 微信视频号版权问题 视频号下载助手机器人如何获取 手机市场基本一年每个品牌商发布的手机就高达10多种&#xff0c;而这些设备中并不支持手机缓存操作&#xff0c;却把市场搞的越来越浑&#xff0c;还不断宣传手机缓存可保存视频&#xff0c;今天教教大家如何使用视频号…

程序员转行8大方向,都考虑一下

众所周之&#xff0c;程序员的工作通常面临较大的压力&#xff0c;包括项目进度紧张、技术难题需要解决、与其他团队成员沟通协作等。 长时间处于高压状态下可能会导致一些程序员感到身心疲惫&#xff0c;这也让大家产生了转行的想法&#xff0c;程序员想要转行&#xff0c;有…

私域加持业务 快消门店运营新玩法

两个月前&#xff0c;某快消品企业的李总急切地联系了纷享销客&#xff0c;希望能找到解决终端门店运营难题的有效方法。 Step1、连接终端门店&#xff0c;导入私域进行深度维系与运营 一、与终端门店建立联系 为了与众多门店老板建立紧密的联系&#xff0c;并将他们转化为企…

error: #error C++17 or later compatible compiler is required to use PyTorch.

背景 在安装wonder3d的时候要安装tinycudnn&#xff0c; 命令如下&#xff1a; pip install githttps://github.com/NVlabs/tiny-cuda-nn/#subdirectorybindings/torch报错如下&#xff1a; error: #error C17 or later compatible compiler is required to use PyTorch. 解…

sqliteSQL基础

SQL基础 SQLite 数据库简介 SQLite 是一个开源的、 内嵌式的关系型数据库&#xff0c; 第一个版本诞生于 2000 年 5 月&#xff0c; 目前最高版本为 SQLite3。 下载地址&#xff1a; https://www.sqlite.org/download.html 菜鸟教程 : https://www.runoob.com/sqlite/sqlit…