【洛谷P2846】光开关【线段树】

RK3588设备树节点实战:从零配置音频与显示模块(ES8388+DSI0) 本文详细介绍了在RK3588平台上配置音频编解码器ES8388和显示接口DSI0的设备树节点实战。通过具体案例拆解设备树节点的编写逻辑与调试技巧,包括音频路由与声卡配置、DSI控制器基础配置、视频通路路由配置以及电源管理与时钟树设计。文章还提供了调试工具与实战技巧,帮助开发者快速解决常见问题。 阅读详情

题目大意:

题目链接:https://www.luogu.org/problemnew/show/P2846
给出一个01串,每次有两种操作:

  • 0   x   y 0\ x\ y 0 x y,表示将 x x x到 y y y之间全部取反。
  • 1   x   y 1\ x\ y 1 x y,表示输出 x x x到 y y y之间1的个数。

思路:

首先,这是一道三倍经验题。
P2574 XOR的艺术
P3870 [TJOI2009]开关
(这两道题可以用分块做,但是光开关用分块会T)


这道题其实就是一个裸的线段树。用 t r e e [ x ] . l tree[x].l tree[x].l和 t r e e [ x ] . r tree[x].r tree[x].r表示这个区间的左右端点, t r e e [ x ] . n u m tree[x].num tree[x].num表示这个区间有多少个1, t r e e [ x ] . l a z y tree[x].lazy tree[x].lazy就是懒惰标记。
其中只有 t r e e [ x ] . l a z y tree[x].lazy tree[x].lazy和线段树模板不一样。由于很明显如果我们将同一个区间取反两次,那么就是没有取反的意思。所以, t r e e [ x ] . l a z y tree[x].lazy tree[x].lazy其实只要表示这个区间是否被按了奇数次就可以了(按偶数次其实就是按很多个两次,依旧没变),所以 t r e e [ x ] . l a z y tree[x].lazy tree[x].lazy的取值就只会是0或1(0表示按了偶数次,1表示按了奇数次),每次更新时异或1即可。
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)


分块的做法也稍微提一下。可以将这个总区间分成 n \sqrt{n} n ​个小区间,每次直接在每个小区间内更新,与分块模板也很像。
时间复杂度: O ( n n ) O(n\sqrt{n}) O(nn ​)


线段树模板:https://blog.youkuaiyun.com/SSL_ZYC/article/details/81045174
分块模板:https://blog.youkuaiyun.com/SSL_ZYC/article/details/81978158


代码:

#include <cstdio>
#define N 1000100
using namespace std;

int n,m,w,x,y;

struct node
{
	int l,r,lazy,num;
}tree[N*3];

void make(int x) 
{
	if (tree[x].l==tree[x].r) return;
	int mid=(tree[x].l+tree[x].r)/2;
	tree[x*2].l=tree[x].l;
	tree[x*2].r=mid;
	tree[x*2+1].l=mid+1;
	tree[x*2+1].r=tree[x].r;
	make(x*2);
	make(x*2+1);
}

void pushdown(int x)  //下传标记
{
	if (tree[x].lazy)
	{
		tree[x*2].num=tree[x*2].r-tree[x*2].l+1-tree[x*2].num;
		tree[x*2].lazy^=1;
		tree[x*2+1].num=tree[x*2+1].r-tree[x*2+1].l+1-tree[x*2+1].num;
		tree[x*2+1].lazy^=1;
		tree[x].lazy=0;
	}
}

int ask(int x,int l,int r)  //查找
{
	if (tree[x].l==l&&tree[x].r==r) return tree[x].num;
	if (tree[x].l==tree[x].r) return 0;
	pushdown(x);
	int mid=(tree[x].l+tree[x].r)/2;
	if (l>mid) return ask(x*2+1,l,r);
	if (r<=mid) return ask(x*2,l,r);
	return ask(x*2,l,mid)+ask(x*2+1,mid+1,r);
}

void change(int x,int l,int r)  //修改
{
	if (tree[x].l==l&&tree[x].r==r)
	{
		tree[x].num=tree[x].r-tree[x].l+1-tree[x].num;  //更新每个区间的值
		tree[x].lazy^=1;
		return;
	}
	if (tree[x].l==tree[x].r) return;
	pushdown(x);
	int mid=(tree[x].l+tree[x].r)/2;
	if (l>mid)
	{
		change(x*2+1,l,r);
		tree[x].num=tree[x*2].num+tree[x*2+1].num;  //更新每个区间的值
		return;
	}
	if (r<=mid)
	{
		change(x*2,l,r);
		tree[x].num=tree[x*2].num+tree[x*2+1].num;  //更新每个区间的值
		return;
	}
	change(x*2,l,mid);
	change(x*2+1,mid+1,r);
	tree[x].num=tree[x*2].num+tree[x*2+1].num;  //更新每个区间的值
}

int main()
{
	scanf("%d%d",&n,&m);
	tree[1].l=1;
	tree[1].r=n;
	make(1);
	while (m--)
	{
		scanf("%d%d%d",&w,&x,&y);
		if (w)
		{
			printf("%d\n",ask(1,x,y));
		}
		else
		{
			change(1,x,y);
		}
	}
	return 0;
}
【QGIS、OSM】利用python开源工具实现指定区域的交通分配 如果从osmgnms和grid2demand得到的node.csv,我们要修改path4gnms代码中的utils.py的四处设置。利用QGIS实现可视化,得到的link_performance.csv,参数有volume和VOC。改完这四处代码,就可以运行path4gnms中的tutorial.ipynb了。 阅读详情

相关推荐

DeepSeek安装教程

两分钟讲述deepseek正确安装教程

weixin_45906703的博客 1665

【区间dp】【Gym 100712L】01串切割问题 + 线段树优化

题意:         有一个01串,切割的规则为: ①切割后的子串不能是 0101 或者 1010 这样交替的子串 ②切割后的子串长度不能超过 K         询问最少的切割次数   样例:          4                   //4组数据          6 3                //原串长度为6,子串的最长长度为3          ...

lucius-liu.cn 578

论文精读——A Comprehensive Survey of Continual Learning: Theory, Method and Application

为了应对现实世界的动态性,智能系统需要在其整个生命周期中逐步获取、更新、积累并利用知识。这种能力被称为Continue Learning(持续学习)。从广义上讲,持续学习明显受到catastrophic forgetting(灾难性遗忘)的限制,即学习新任务通常会导致旧任务的性能急剧下降。Continue Learning的核心目的有二,其一为(稳定性与可塑性间的权衡),其二为(足够的任务内/任务间泛化能力)。

xsddys的博客 1241

【洛谷题单刷题日记】线段树

1:洛谷 P3372 【模板】线段树 1   线段树是用来解决区间和/区间最值/区间覆盖的问题,而本道题涉及到了区间和问题,是区间修改和区间查询的问题(单点查询和单点修改对应的就是l==rl==rl==r的情况)。如果修改一个区间时,每次都修改到叶结点,那么一个叶节点的修改所需的复杂度是O(nlogn)O(nlogn)O(nlogn),修改一次区间的时间复杂度是O(nlogn)O(nlogn)O(nlogn),QQQ次区间修改的时间复杂度是O(n2logn)O(n^2logn)O(n2logn),效率甚至低

CUMT_William_Liu的博客 690

蓝桥杯单片机开发实战:Keil环境配置与IAP15F2K61S2头文件设置详解

本文详细讲解了为蓝桥杯单片机竞赛配置Keil开发环境的关键步骤,重点解析了IAP15F2K61S2专用头文件的获取与设置方法。通过使用STC-ISP工具添加芯片型号和头文件,确保编译器能正确识别寄存器,是成功进行单片机编程和竞赛备赛的基础。文中还提供了从软件安装、工程创建到常见问题排查的完整实战指南。

soda5的博客 888

某10kV纺织厂供电系统设计【CAD图纸源码+Word文档】

本文详细介绍了设计变电所原始资料,负荷统计,基于负荷统计给出了变压器的选型,变电所主接线方式的设计、高低压母线、电缆的技术要求、短路电流的计算以及相关电气设备的保护参数及保护定值的计算、安全措施的规定。

weixin_761237174的博客 2744

[洛谷]P3372 【模板】线段树 1 (#线段树)

题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[...

A.pro的博客 582

学Simulink——基于Simulink的AUTOSAR架构下电机控制软件组件建模

本文详细介绍了在Simulink中基于AUTOSAR架构开发电机控制软件组件(SWC)的全流程。主要内容包括:首先阐述了AUTOSAR架构对汽车电子系统开发的价值,包括提高软件复用率、降低集成成本和改善验证环境。然后重点讲解了在Simulink中构建电机控制SWC的具体步骤:从创建AUTOSAR组件模型、定义数据端口和服务端口,到搭建FOC控制算法、配置运行实体,最后生成AUTOSAR描述文件和验证RTE接口。文章还提供了与基础软件(BSW)的集成方案、工程实践要点和常见问题解决方案,并以大众MEB平台等实

amy_mhd的博客 68

[C++]洛谷 【模板】线段树1 详解+lazy标志优化

通过这道模板题,我将对线段树的原理和代码实现进行总结,内容包括段树开辟4n空间的原因、完整代码剖析、lazy标志优化、线段树与差分数组的比较等

weixin_62712365的博客 1419

LVGL(lv_canvas)

这篇文章介绍了LVGL图形库中的lv_canvas组件,主要内容包括: lv_canvas是一个绘图缓冲区对象,提供丰富的绘图API,可以理解为LVGL的"离屏画布"。 基本使用流程:创建缓冲区->创建canvas对象->设置缓存和尺寸->进行绘图操作。 详细列举了常用的绘图函数,如绘制线条、矩形、文字、图片等。 提供了示例代码展示如何创建画布并绘制一条红色线段。 介绍了canvas的典型应用场景,如动态波形绘制、自定义控件底图等。 对比了canvas与普通img的区别

m0_49476241的博客 1030

21天学会PCIe专栏(4.3)--PCIe配置方法

通过本节的学习,你应该对PCIe配置方法有了更深入的了解。软件配置方法包括直接访问和间接访问,可以通过特定的I/O指令或系统调用进行配置。硬件配置方法包括通过BIOS/UEFI设置和跳线设置,可以根据需要修改PCIe设备的配置参数。

xiaoheshang_123的博客 722

CSU 2187 思维+贪心

http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2187 Description 给当一个01串,最多可以对一段区间里的01取反一次,求最多能取得的1的个数 Input 多组数据,第一行为数组组数T(T<=10) 每组数据第一行一个整数N,1<=N<=1000000 第二行一个长度为N的01字符串 O...

xiji333的博客 618

RK3588高速接口实战-PCIE

摘要: RK3588的PCIe接口支持PCIe 3.0x4和PCIe 2.1x1/x2,具备Root Complex和Endpoint模式,适用于NVMe SSD、5G模块等高速设备。硬件设计需注意85Ω/100Ω阻抗匹配、220nF AC耦合电容及100MHz参考时钟。设备树需配置控制器节点、PHY模式和IOMMU映射(RC模式用iommu-map,EP模式用iommus)。调试时可通过lspci检查链路状态,dmesg查看训练日志,perf分析性能。常见问题包括设备识别失败(检查复位时序、PHY配置)、

weiyvyy的博客 505

洛谷P2846 [USACO08NOV]光开关Light Switching 线段树+区间反转

洛谷P2846 [USACO08NOV]光开关Light Switching 标签 线段树 区间反转 简明题意 给出一排初始时都关闭着的灯,现需要你支持两张操作。 将区间[L,R]的灯都反转 询问区间[L,R]亮着的灯的数量 思路 区间操作显然线段树可以解决 我们给每个节点两个属性: sum表示当前区间开着的灯的数量 tag表示这个区间的开关还有多少次未被按下 我们...

danzh 519

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

洛谷P2574 XOR的艺术 线段树+区间反转

洛谷P2574 XOR的艺术 标签 线段树 区间反转 简明题意 这题实际上就是 洛谷2846 光开关 题解 思路 思路可以直接看上面的题解了。这题只是换了个情景,然后默认给了你初始的开关灯情况,而那题默认所有的灯都是关闭的。这里可以直接把初始的01串当成命令,遇到0执行一次change即可 注意事项 无 总结 无 AC代码 #include<cstdio&g...

danzh 295

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

线段树总结

高级数据结构——线段树总结 本蒟蒻最近在做线段树的题,做了一小部分,有感而发,故写下这篇博客,如有错误,请大佬指出。 线段树,作为一种高级数据结构,而其作用与分块、树状数组均有一脉相承的部分,而且有的题均可以使用上面的两种算法去解决(当然只是一部分题) 对于线段树的介绍,我也就不再多说了,即对于数列将其放在树上进行维护一些值,在题目的要求下进行修改和更新,最后得到答案。 首先我们先上一两...

weixin_30545285的博客 168

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

洛谷——P2846 [USACO08NOV]光开关Light Switching

P2846 [USACO08NOV]光开关Light Switching 题目大意: 灯是由高科技——外星人鼠标操控的。你只要左击两个灯所连的鼠标, 这两个灯,以及之间的灯都会由暗变亮,或由亮变暗。右击两个灯所连的鼠 标,你就可以知道这两个灯,以及之间的灯有多少灯是亮的。起初所有灯都是暗的,你的任务是在LZ之前算出灯的亮灭。 线段树的懒标记下传 #include&...

weixin_30439131的博客 217

洛谷P2846 光开关Light Switching

题目描述 灯是由高科技——外星人鼠标操控的。你只要左击两个灯所连的鼠标, 这两个灯,以及之间的灯都会由暗变亮,或由亮变暗。右击两个灯所连的鼠 标,你就可以知道这两个灯,以及之间的灯有多少灯是亮的。起初所有灯都是暗的,你的任务是在\(LZ\)之前算出灯的亮灭。 输入输出格式 输入格式: 第1 行: 用空格隔开的两个整数\(N\) 和\(M\),\(N\) 是灯数 第\(2..M+1\) 行: 每行表...

weixin_30325071的博客 178

洛谷 P3870 [TJOI2009]开关 / P2846 [USACO08NOV]光开关Light Switching

题目 水题,不知道哪来的省选难度    线段树维护一下就行   这里我用了个小技巧:    开的灯关了,关的灯开了,灯的总数不变     只是把这两者数量交换下    例如:    1 0 1 0 1 1     开着的灯的数量:4    关着的灯的数量:2 操作一次后:   0 1 0 1 0 0    开着的灯的数量:2      关着的灯的数量:4 就是把2和4交换下,似乎比较容易...

Warriors Dynasty 273

洛谷2846 USACO08NOV 光开关 Light Switching

题目:Light Switching思路:区间修改区间查询的线段树。代码:#include &lt;cstdio&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;stack&gt; #include &lt;queue&gt; #include &lt;deque&gt; #include &lt;set&

iwi 361

线段树练习(也有树状数组)

洛谷 P2184 贪婪大陆 题目背景 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败……人类被蚂蚁们逼到了Greed Island上的一个海湾。现在,小FF的后方是一望无际的大海, 前方是变异了的超级蚂蚁。 小FF还有大好前程,他可不想命丧于此, 于是他派遣手下最后一批改造SCV布置地雷以阻挡蚂蚁们的进攻。 题目描述 小FF最后一道防线是一条长度为N的战壕, 小...

weixin_38169359的博客 251

线段树详解(洛谷模板题)

一、算法概况     线段树是一种二叉搜索树,它将一个区间分成多个单元区间,每个单元区间对应线段树的一个叶子节点,有查询区间和,查询区间最大值、最小值等功能(本篇讲解的是求区间和的代码),由于它二叉结构的特性,使得他的操作复杂读为O(logN)     线段树的根节点代表所要维护的值在总区间 [a,b] 的值,他的左子节点代表区间 [a,(a+b)/2] ,他的右子节点代表区间 [(a+b)/

spencer12138的博客 1336

洛谷P3960 队列(线段树)(详解)

我将详细讲解如何用线段树解决这道问题,感兴趣就看看吧

idio_dsfrbeki的博客 367

01串

Problem:01串 Description: 现在我们有一个由01组成的字符串。我们需要在上面做一些操作。每次我们都选一个“01”子串,把他替换成110。如果找不到“01”子串,那么操作结束。请输出总共进行了多少次操作,结果请mod 1e9+7。 Ps:“01”子串必须是相邻的0和1,字符串中只包含0和1。 Input: 首先一个T,代表接下来有T行。 接下来的T行,每行一个字符串str(1&...

Welcome to csdn_PatrickStar's blog 923

51nod 1391 01串(思维+前缀和或者线段树)

给定一个01串S,求出它的一个尽可能长的子串S[i..j],满足存在一个位置i<=x <j, S[i..x]中0比1多,而S[x + 1..j]中1比0多。求满足条件的最长子串长度。 收起 输入 一行包含一个只由0和1构成的字符串S。 S的长度不超过1000000。 输出 一行包含一个整数,表示满足要求的最长子串的长度。 输入样例 10 输出样例 0 ...

pxlsdz的博客 655

51nod 1391 01串【线段树,思维】

题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1391题意:给定一个01串S,求出它的一个尽可能长的子串S[i..j],满足存在一个位置i<=x < j, S[i..x]中0比1多,而S[x + 1..j]中1比0多。求满足条件的最长子串长度。 Input一行包含一个只由0和1构成的字符串S。 S的长度不超过100

HARD_UNDERSTAND 679
上一篇: 【洛谷P1144】最短路计数【最短路】
下一篇: 【HDU 1054】Strategic Game【树形DP】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值