P13274 [NOI2025] 三目运算符

news/2025/10/10 19:20:43/文章来源:https://www.cnblogs.com/Sinktank/p/19133633

P13274 [NOI2025] 三目运算符

提供一个不同的线段树实现。


根据题目我们知道,\(s_i\) 变换后的值仅与 \(s_{i-2},s_{i-1},s_i\) 有关。考虑这三个数的 \(2^3\) 种取值,我们发现只有 101110 会使 \(s_i\) 发生变化。

进一步分析:

  • 101 会使 \(s_i\) 变成 \(0\),这一段不会再变化。

  • 110

    • 1100 会变成 1110
    • 1101 会变成 1110

    换句话说,110 相当于把当前的 \(0\) 向后推了一位。

    这样一路推到最后,如果记 110 的起始位置为 \(p\),则操作次数就是 \(n-p-1\)

综上我们可以得到答案:\(\max([\text{存在 }\texttt{101}],n-p_{\min}-1)\)


我们可以用线段树来动态维护。

我们可以将相邻的三个数压成一个 \([0,7]\) 的整数,扔到大小为 \(n-2\) 的线段树里。

这样我们仅需维护:

  • 是否存在一个位置存有 101
  • 是否存在一个位置存有 010
  • 存有 110 的最小位置。
  • 存有 001 的最小位置。

查询直接查根节点就行了。

修改操作,我们可以转化为区间异或 7,但是因为我们只在叶子节点维护值,所以没必要这样做。直接将需要修改的区间的第 \(1,2\) 条交换,第 \(3,4\) 条交换即可。

需要注意的是,对于 \(l-2,l-1,r-1,r\),它们管辖的区间的修改操作不是完整的。不能参与区修,需要单独点修处理一下。

另外注意特殊处理 \(l=r\) 的情况。

时间复杂度 \(O(T(n+q\log n))\)

码量相比其他题解的做法小了不少。但是受限于能力,还是实现得不怎么好看。权且提供这样一个思路~

点击查看代码
#include<bits/stdc++.h>
#define lc (x<<1)
#define rc (x<<1|1)
using namespace std;
typedef long long ll;
const int N=4e5+5;
int c,t,n,q;ll ans;
string s;
struct SEG{int c[N<<2],p[2][N<<2];bitset<N<<2> tg,a[2];inline int calc(){return max(int(a[0][1]!=0),n-p[0][1]-1);}inline void init(int x,int c,int l){a[0][x]=(c==5),a[1][x]=(c==2);p[0][x]=(c==6?l:1e9),p[1][x]=(c==1?l:1e9);}inline void upd(int x){a[0][x]=a[0][lc]|a[0][rc],a[1][x]=a[1][lc]|a[1][rc];p[0][x]=min(p[0][lc],p[0][rc]),p[1][x]=min(p[1][lc],p[1][rc]);}inline void pushdown(int x){if(tg[x]) tg[x]=0,mktg(lc),mktg(rc);}inline void mktg(int x){tg[x]=tg[x]^1,a[0][0]=a[0][x],a[0][x]=a[1][x],a[1][x]=a[0][0],swap(p[0][x],p[1][x]);}inline void build(int x,int l,int r){tg[x]=0;if(l==r){init(x,c[x]=((s[l-1]&1)<<2)|((s[l]&1)<<1)|(s[l+1]&1),l);return;}int mid=(l+r)>>1;build(lc,l,mid),build(rc,mid+1,r),upd(x);}inline void chp(int x,int p,int v,int l,int r){if(l==r){c[x]^=v;if(tg[x]) tg[x]=0,init(x,c[x]^=7,l);else init(x,c[x],l);return;}int mid=(l+r)>>1;pushdown(x);if(p<=mid) chp(lc,p,v,l,mid);else chp(rc,p,v,mid+1,r);upd(x);}inline void chr(int x,int a,int b,int l,int r){if(a<=l&&r<=b) return mktg(x),void();int mid=(l+r)>>1;pushdown(x);if(a<=mid) chr(lc,a,b,l,mid);if(b>mid) chr(rc,a,b,mid+1,r);upd(x);}
}seg;
inline void chp(int x,int v){if(x>0&&x<n-1) seg.chp(1,x,v,1,n-2);}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>c>>t;while(t--){cin>>n>>q>>s;seg.build(1,1,n-2);ans=seg.calc();for(int i=1,l,r;i<=q;i++){cin>>l>>r;if(l==r) chp(l,4),chp(l-1,2),chp(l-2,1);else{if((l+1)^r) seg.chr(1,l,r-2,1,n-2);chp(r,4),chp(r-1,6),chp(l-1,3),chp(l-2,1);}ans^=1ll*(i+1)*seg.calc();}cout<<ans<<"\n";}return 0;
}

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

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

相关文章

Microsoft Office不小心卸载或重装系统后,如何重新安装 ... - sherlock

下载安装刚买电脑时自带的office版本。安装包已整理好并上传到网盘了 夸克网盘安装完成后,打开任意Word登录激活账户,即可安装完成使用

HTTPS 抓包乱码怎么办?原因剖析、排查步骤与实战工具对策(HTTPS 抓包乱码、gzipbrotli、TLS 解密、iOS 抓包) - 实践

HTTPS 抓包乱码怎么办?原因剖析、排查步骤与实战工具对策(HTTPS 抓包乱码、gzipbrotli、TLS 解密、iOS 抓包) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

使用JaCoCo进行代码覆盖率分析

使用JaCoCo进行代码覆盖率分析 一、背景说明 1、下载jacoco https://www.jacoco.org/jacoco/2、解压缩后的两个关键文件jacocoagent.jar - 用于运行时收集覆盖率数据jacococli.jar - 用于操作覆盖率数据二、流程命令及…

计算机视觉专家入选德国国家科学院

本文介绍了计算机视觉专家Michael J. Black因其在3D人体建模领域的突破性研究入选德国国家科学院,详细阐述了他的研究成果包括开发逼真3D虚拟形象、从图像视频估计人体形状和运动的方法,以及他在计算机视觉领域获得的…

2025 年工程管理软件/软件系统/软件App/软件平台/工程管理软件和验房系统公司/企业推荐榜:数字化转型下的实用选型指南

在工程行业数字化转型加速推进的背景下,传统管理模式面临进度滞后、成本失控、协同不畅等多重挑战,工程管理软件已从可选工具成为提升项目效率的核心支撑。2025 年工程管理软件市场规模持续扩大,但厂商技术实力与服…

【Java学习】【Java基础】--第1篇:入门Java和对面向对象的理解

一、浅谈为何学习Java 24年本科毕业,从事电气工程师的岗位至今,工作内容愈发让自己觉得无聊。工作中接触到web开发的同事,便对此感兴趣。在学习过程中也验证了这个点,抛开之后是否能靠学这个转行不谈,投入到学习编…

solutions

edit 做個備份構成樹考慮每個節點的父親的選擇方法。 區間移動一個,考慮滑動窗口,即使單調隊列。 點分治每個子樹的處理按照從小到大來。 有顏色的貢獻,按照排序處理,因爲每個前面只有可能一種相同顔色。 有固定的…

技术面:Spring (事务传播机制、事务失效的原因、BeanFactory和FactoryBean的关系)

Spring的事务传播机制 什么是Spring事务传播机制 Spring的事务传播机制,主要是用于控制多个事务方法相互调用时的事务行为。在后端复杂的业务场景中,多个事务之间的调用可能会导致事务的不一致,例如:数据重复提交,…

B2002 Hello,World!【入门】

B2002 Hello,World!【入门】Hello,World! 题目描述 编写一个能够输出 Hello,World! 的程序。 提示:使用英文标点符号; Hello,World! 逗号后面没有空格。 H 和 W 为大写字母。输入格式 输出格式 样例 #1 样例输入 #1 …

完整教程:跨境必看:TikTok Ads广告竞价策略分享

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接

安装MySQL 8.0在Ubuntu系统上通常涉及以下步骤:更新系统包列表: sudo apt update安装MySQL服务器: sudo apt install mysql-server运行安全脚本:安全脚本会移除一些不安全的默认设置和匿名用户。 sudo mysql_secur…

04-最简单的字符设备驱动

设备驱动分类 linux设备驱动一般分为3类,字符设备,块设备,网络设备。前两个在/dev目录下有对应的设备节点,网络设备比较特殊,没有。通过ls -l /dev/xx可以看出设备类型: thammer@test:~$ ls -l /dev/nvme0n1 brw…

完整教程:手机可视化方案(针对浓度识别)

完整教程:手机可视化方案(针对浓度识别)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

AI元人文系列文章:决策范式与无为而治

AI元人文系列文章:决策范式与无为而治 引言:当算力遇见道法 在人工智能呼啸而来的今天,我们正忙于追问“AI能做什么?”——它能以超越人类的速度解题、生成、预测。然而,一个更具颠覆性的问题悄然浮现:当AI无所不…

用批处理材料实现Excel和word文件的重造

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Android Activity 生命周期深度解析:从原理到实战,面试考点全覆盖 - 指南

Android Activity 生命周期深度解析:从原理到实战,面试考点全覆盖 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

SAP导入证书

SAP导入或更新某个网站的证书 - 鲸与海 - 博客园

洛谷《深入浅出程序设计竞赛(基础篇)》题解

洛谷《深入浅出程序设计竞赛(基础篇)》题解相关链接:洛谷《能力全面提升综合题单》选解 《深入浅出程序设计竞赛(基础篇)》题解 刷题网址:题单列表 - 洛谷 顺序结构 刷题网址:【入门1】顺序结构 - 题单 - 洛谷 …

实用指南:Linux编译SRS并测试RTMP流

实用指南:Linux编译SRS并测试RTMP流2025-10-10 18:49 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !im…

华为链路聚合配置

实验7 以太网接口和链路配置 实验目标:掌握接口速率和双工模式的配置方法掌握使用手动模式配置链路聚合的方法掌握使用静态LACP模式配置链路聚合的方法掌握在静态LACP模式下配置接口优先级的方法实验拓扑: 为了提高…