P2572 [SCOI2010] 序列操作 线段树维护连续子段和(01串)

浅调两个钟,终于A掉了,还是不熟练啊

这道题是P4513 小白逛公园 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)的变种

维护的更多,可以说,在维护连续的1,实质上就是维护最大连续子段和。

  • 0 l r 把 [l,r] 区间内的所有数全变成 0;
  • 1 l r 把 [l,r] 区间内的所有数全变成 1;
  • 2 l r 把 [l,r] 区间内的所有数全部取反,也就是说把所有的 0 变成 1,把所有的 1 变成 0;
  • 3 l r 询问 [l,r] 区间内总共有多少个 1;
  • 4 l r 询问 [l,r] 区间内最多有多少个连续的 1。

要进行如上的五种操作,我们考虑建立

1.len来记录区间长度(优化)。

2.考虑用tag来维护懒标记,tag=-1时没有操作,tag=0使执行0行为,1同样。

3.用rev记录是否反转(reverse简写)  

4.用b,rb,lb,mb分别记录 区间中1个数 区间左边1连续个数 区间右边1连续个数 最大连续个数

(c同理)

代码如下(有注释)

// Problem: 
//     P2572 [SCOI2010] 序列操作
//   
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P2572
// Memory Limit: 128 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<iostream>
using namespace std;
const int N=1e5+10;
int a[N];
#define ls u<<1
#define rs u<<1|1
#define endl '\n'
struct Tree{int l,r;int b,lb,rb,mb,c,lc,rc,mc;//1的区间个数 左边连续个数 右边连续个数 最大连续个数int len,tag,rev;//-1  无  0 0 1 1
}tr[N*4];
void mo(int u,int op){Tree &t=tr[u];//注意每个地方的t都是要引用的if(op==0){t.c=t.lc=t.rc=t.mc=t.len;//覆盖t.b=t.lb=t.mb=t.rb=0;t.rev=0;//要重置 覆盖掉了t.tag=0;}if(op==1){t.c=t.lc=t.rc=t.mc=0;t.b=t.lb=t.mb=t.rb=t.len;t.rev=0;//要重置 覆盖掉了t.tag=1;}if(op==2){swap(t.c,t.b);swap(t.rc,t.rb);//取反,所有的都直接交换即可swap(t.lc,t.lb);swap(t.mc,t.mb);t.rev^=1;}
}
void pushup(Tree &t,Tree l,Tree r){//别忘了开引用t.b=l.b+r.b;t.c=l.c+r.c;t.lb=l.c ? l.lb : l.lb+r.lb;  //判断是否有非1的,两种处理方式t.lc=l.b ? l.lc : l.lc+r.lc;t.rb=r.c ? r.rb : l.rb+r.rb;t.rc=r.b ? r.rc : l.rc+r.rc;t.mb=max(max(l.mb,r.mb),l.rb+r.lb);t.mc=max(max(l.mc,r.mc),l.rc+r.lc);
}
void pushdown(int u){Tree &t=tr[u];if(t.tag==0) mo(ls,0),mo(rs,0);if(t.tag==1) mo(ls,1),mo(rs,1);if(t.rev) mo(ls,2),mo(rs,2);t.tag=-1;//重置t.rev=0;//重置
}void update(int u,int l,int r,int op){if(l<=tr[u].l&&tr[u].r<=r){mo(u,op);return;//直接操作}pushdown(u);//记得下传int m=(tr[u].l+tr[u].r)>>1;if(l<=m) update(ls,l,r,op);if(r>m) update(rs,l,r,op);pushup(tr[u],tr[ls],tr[rs]);
}Tree query(int u,int l,int r){if(l<=tr[u].l&&tr[u].r<=r){return tr[u];}pushdown(u);int m=(tr[u].l+tr[u].r)>>1;if(r<=m) return query(ls,l,r);//这里与平常的写法是不同的if(l>m) return query(rs,l,r);Tree t;//开一个t结合一下pushup(t,query(ls,l,m),query(rs,m+1,r));return t;
}void build(int u,int l,int r){int t=a[l];tr[u]={l,r,t,t,t,t,t^1,t^1,t^1,t^1,r-l+1,-1,0};//1^1=0 0^1=1if(l==r) return;int m=(l+r)>>1;build(ls,l,m);build(rs,m+1,r);pushup(tr[u],tr[ls],tr[rs]);
}int main(){int n;cin>>n;int m;cin>>m;for(int i=1;i<=n;++i) cin>>a[i];build(1,1,n);while(m--){int x,y,z;cin>>x>>y>>z;y++,z++;//右移一位方便运算if(x<=2){update(1,y,z,x);}else{Tree t=query(1,y,z);cout<<((x==3) ? (t.b) :(t.mb))<<endl;}}return 0;
}

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

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

相关文章

Wmware安装Linux(centerOS、Ubuntu版本)

目录 1、安装wmware 2、center版本 3、ubuntu版本 1、安装wmware 此处不做展开。 2、center版本 需要提前下载的文件&#xff1a; 无图形化界面https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso 有图形化界面https://mirrors.a…

本地环境下运行Spark程序

1. 前言 终于又有实际的大数据计算业务功能开发了&#xff0c;是对一个以前用SpringBoot来处理Elasticsearch集群上的日志数据的计算程序&#xff0c;这个程序的最大问题就是单进程内存会达到几十G&#xff0c;直到最后运行在中途出现OutOfMemoryError而崩溃掉&#xff0c;毕竟…

增删卜易——八宫六十四卦

之前看倪海厦的《天纪》笔记里面提到了六十四卦世应,觉得不知道这个世应是啥意思。很长时间就没看了,偶然间看到了张文江教授写的一本书《潘雨廷先生谈话录》提到了《卜筮正宗》,“卜筮最后的判断是非理性转义,其他一切都只是形式”,“明人的著作,从京氏易出,如今天几日…

STM32 学习12 输入捕获与触摸按键

STM32 学习12 输入捕获与触摸按键 一、输入捕获介绍1. 概念2. STM32F1 资源3. 捕获原理 二、输入捕获配置步骤1. 使能时钟、设置端口模式2. 初始化定时器3. 设置捕获参数4. 开启捕获和定时器中断&#xff08;溢出中断|更新中断&#xff09;6. 编写定时器中断服务函数7. 使能定时…

针对教育行业的网络安全方案有哪些

智慧校园”是教育信息化进入高级阶段的表现形式&#xff0c;比“数字校园”更先进。集体知识共融、共生、业务应用融合创新、移动互联网物联网高速泛在是其重要特征。特别是在互联网教育的大环境下&#xff0c;为了更好的发挥智慧化教学服务和智慧化教学管理功能&#xff0c;需…

node.js入门—day02

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;给自己一个梦想&#xff0c;给世界一个惊喜。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章目录 什么是单线程…

计算机服务器中了devos勒索病毒怎么解密,devos勒索病毒解密工具流程

随着网络技术的不断发展与更新&#xff0c;越来越多的企业利用网络开展了各项工作业务&#xff0c;网络也为企业提供了极大便利&#xff0c;大大提高了办公效率。但网络是一把双刃剑&#xff0c;企业的数据安全问题一直是企业关心的主要话题&#xff0c;近日&#xff0c;云天数…

InDesign 2024:创意不熄火,设计不止步mac/win版

InDesign 2024&#xff0c;不仅仅是一个设计软件更新&#xff0c;它更是设计界的一次革命性飞跃。这款全新的设计软件将为您打开前所未有的创意大门&#xff0c;让您在设计的海洋中畅游无阻。 InDesign 2024 mac/win版获取 InDesign 2024以其卓越的性能和稳定性&#xff0c;确…

钉钉魔法盒:解锁企业数字化转型新密码

在数字化的浪潮中&#xff0c;一家公司在企业团队管理和商场综合运营中致力于实现数字化转型。于是&#xff0c;该公司在与无雀科技商讨后&#xff0c;决定引入钉钉平台&#xff0c;不仅要打造商业地产平台&#xff0c;更要优化团队管理流程&#xff0c;提升组织运营效率。 针对…

Linux中mysql的安装、远程访问、基础操作、文件导入

Linux中mysql的安装、远程访问、基础操作、文件导入 cheet card1. 安装1. 使用root账号安装mysql 2. 启动mysql并创建root、管理员两个账号3. 基础操作3.1 数据库的查看、创建、修改、删除3.2 mysql的数据类型3.3 数据表的基本操作3.4 数据表结构的修改3.5 表中数据的增、删、改…

git基础命令(一)

目录 基础概念git statusgit addgit diffgit loggit commit文件可以处于以下三种状态之一远程存储库与本地存储库参考 用于知识记录。后续有新的的内容&#xff0c;例子&#xff0c;将持续更新本文档。 基础概念 工作树&#xff1a;git add 之前&#xff0c;变动内容的文件列表…

华为认证云计算专家(HCIE-Cloud Computing)--问答题

华为认证云计算专家&#xff08;HCIE-Cloud Computing&#xff09;–问答题 38 处于退出状态的容器&#xff0c;会占用系统什么资源? 参考答案&#xff1a;宿主机文件系统资源 39 在docker中&#xff0c;删除所有容器的命令是什么? 参考答案&#xff1a;docker ps -aq| xar…

从金蝶云星空到钉钉通过接口配置打通数据

从金蝶云星空到钉钉通过接口配置打通数据 对接系统金蝶云星空 金蝶K/3Cloud&#xff08;金蝶云星空&#xff09;是移动互联网时代的新型ERP&#xff0c;是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”&#xff0c;旨在帮助企业打造面…

想要自己制作一款游戏,需要掌握哪些基本技能?

你是否曾经沉浸在游戏的世界中&#xff0c;感受到游戏带来的无限乐趣&#xff1f;你是否曾经梦想能够亲手制作一款属于自己的游戏&#xff0c;为玩家带来独特的体验&#xff1f;然而&#xff0c;要实现自己的游戏创作梦想&#xff0c;并不是一件轻松的事情。需要掌握各种技能和…

蓝桥杯历年真题省赛java b组 2016年 第六届 剪邮票

一、题目 剪邮票 如【图1.jpg】, 有12张连在一起的12生肖的邮票。 现在你要从中剪下5张来&#xff0c;要求必须是连着的。 &#xff08;仅仅连接一个角不算相连&#xff09; 比如&#xff0c;【图2.jpg】&#xff0c;【图3.jpg】中&#xff0c;粉红色所示部分就是合格的剪取。…

机器学习 Python库 乱记录

MLFlow—模型实验和跟踪 MLflow是一个平台&#xff0c;帮助你从头到尾管理你的机器学习实验&#xff0c;确保可追溯性和可重复性。它提供了一个集中的存储库&#xff0c;用于存储你的代码、数据和模型工件&#xff0c;以及一个跟踪系统&#xff0c;记录你所有的实验&#xff0c…

CSS 03

1.选择器 1.1 结构伪类选择器 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>结…

[Django 0-1] Core.Files

Core.Files 模块 Django 的核心模块之一&#xff0c;封装文件操作&#xff0c;提供对文件的上传、下载、删除、查看大小等功能。 提供的功能 存储后端解耦&#xff0c;支持多种存储后端&#xff0c;使得在不同存储后端中的文件数据都能以相同的方式操作文件上传、下载、删除…

[云原生] Prometheus自动服务发现部署

一、部署服务发现 1.1 基于文件的服务发现 基于文件的服务发现是仅仅略优于静态配置的服务发现方式&#xff0c;它不依赖于任何平台或第三方服务&#xff0c;因而也是最为简单和通用的实现方式。 Prometheus Server 会定期从文件中加载 Target 信息&#xff0c;文件可使用 YAM…

华为认证云计算专家(HCIE-Cloud Computing)--判断题

华为认证云计算专家&#xff08;HCIE-Cloud Computing&#xff09;–判断题 1.(判断题)华为云stack支持鲲鹏架构&#xff0c;业务可从X86过渡到鲲鹏。 正确答案&#xff1a;正确 2.(判断题)业务上云以后&#xff0c;安全方面由云服务商负责&#xff0c;客户自己不需要做任何防…