P7492 [传智杯 #3 决赛] 序列

news2024/11/13 9:39:20

*原题链接*

一道类似势能线段树的题,区间按位或上k,不满足区间可合并的性质,只能暴力的单点修改。

但是考虑按位或的性质,一个数或上另一个数,只会变大或不变,如果我们能找到一个方法,能够判定区间里的数,或上k后是否有改变,就可以避免n^2的暴力了。我一开始想的是线段树里维护一个logV的数组,表示区间内所有数的二进制表示下某一位是否为1,但这太难写,最后无奈去看官方题解,发现只要维护区间所有数的按位与和And,如果(And&k)==k的话那就不用修改了。那样的话这个题就很简单了,维护最大子段和可以见P4513。至于时间复杂度用类似势能分析的方法分析一波就行了,时间复杂度O(nlognlogV)

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;

int n,m,a[N];

struct node{
	int l,r;
	int sum,lmax,rmax,smax,And;
}tr[N*4];

int read(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
	return x*f;
}

void pushup(node &u,node &l,node &r){
	u.And=(l.And&r.And);
	u.sum=l.sum+r.sum;
	u.lmax=max(l.lmax,l.sum+r.lmax);
	u.rmax=max(r.rmax,r.sum+l.rmax);
	u.smax=max(l.rmax+r.lmax,max(l.smax,r.smax));
}

void pushup(int u){
	pushup(tr[u],tr[u<<1],tr[u<<1|1]);
}

void build(int u,int l,int r){
	if(l==r){
		tr[u]={l,r,a[l],a[l],a[l],a[l],a[l]};
	}
	else{
		tr[u].l=l,tr[u].r=r;
		int mid=(l+r)>>1;
		build(u<<1,l,mid),build(u<<1|1,mid+1,r);
		pushup(u);
	}
}

void modify(int u,int l,int r,int k){
	if((tr[u].And&k)==k) return;
	if(tr[u].l==tr[u].r){
		int x=tr[u].sum|k;
		tr[u]={tr[u].l,tr[u].r,x,x,x,x,x};
	}
	else{
		int mid=(tr[u].l+tr[u].r)>>1;
		if(l<=mid) modify(u<<1,l,r,k);
		if(r>mid) modify(u<<1|1,l,r,k);
		pushup(u);
	}
}

node query(int u,int l,int r){
	if(tr[u].l>=l&&tr[u].r<=r) return tr[u];
	int mid=(tr[u].l+tr[u].r)>>1;
	if(r<=mid) return query(u<<1,l,r);
	if(l>mid) return query(u<<1|1,l,r);
	node tmp,left=query(u<<1,l,r),right=query(u<<1|1,l,r);
	pushup(tmp,left,right);
	return tmp;
}

signed main(){
	
	n=read(),m=read();
	for(int i=1;i<=n;i++) a[i]=read();
	build(1,1,n);
	while(m--){
		int opt,l,r,k;
		opt=read(),l=read(),r=read();
		if(opt==1){
			int tmp=query(1,l,r).smax;
			if(tmp<0) cout<<0<<endl;
			else cout<<tmp<<endl;
		}
		else{
			k=read();modify(1,l,r,k);
		}
	}
	
	return 0;
}

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

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

相关文章

Gitlab-ce upgrade 16.0.1 to 17.3.1【Gitlab-ce 16.0.1 升级 17.3.1】

文章目录 背景gitlab-ce 16.0.1 升级 17.3.1 失败gitlab-ce 16.0.1 升级 16.11.8 失败gitlab-ce 16.0.1 升级 16.7.9 失败gitlab-ce 16.0.1 升级 16.3.8 成功gitlab-ce 16.3.8 升级 16.11.8 失败gitlab-ce 16.3.8 升级 16.7.9 成功gitlab-ce 16.7.8 升级 16.11.8 成功gitlab-ce…

牛客(数字统计)

[NOIP2010]数字统计 题目题解(77)讨论(41)排行面经 new 时间限制&#xff1a;1秒 空间限制&#xff1a;128M 知识点NOIP复赛字符串 校招时部分企业笔试将禁止编程题跳出页面&#xff0c;为提前适应&#xff0c;练习时请使用在线自测&#xff0c;而非本地IDE。 描述 请统计…

【Day08】

目录 MySQL-多表查询-概述 MySQL-多表查询-内连接 MySQL-多表查询-外连接 MySQL-多表查询-[标量、列]子查询 MySQL-多表查询-[行、表]子查询 MySQL-多表查询-案例 MySQL-事务-介绍与操作 MySQL-事务-四大特性 MySQL-索引-介绍 MySQL-索引-结构 MySQL-索引-操作语法 …

【Qt】消息对话框 QMessageBox

消息对话框 QMessageBox QMessageBox 用于显示一个消息给用户&#xff0c;&#xff0c;并且让用户进行一个简单的选择。 消息对话框是应⽤程序中最常⽤的界⾯元素。消息对话框主要⽤于为⽤⼾提⽰重要信息&#xff0c;强制⽤⼾进⾏选择操作。 例子&#xff1a;创建一个消息对话…

【Datawhale X 李宏毅苹果书 AI夏令营】《深度学习详解》Task3 打卡

文章目录 前言学习目标一、优化策略二、模型偏差三、优化问题三、过拟合增加训练集给模型一些限制 四、交叉验证五、不匹配总结 前言 本文是【Datawhale X 李宏毅苹果书 AI夏令营】的Task3学习笔记打卡。 学习目标 李宏毅老师对应视频课程&#xff1a;https://www.bilibili.…

JMeter 安装使用

JMeter 安装使用 a.安装 下载链接:Apache JMeter - Download Apache JMeter 环境变量 打开 cmd 输入 jmeter&#xff0c;即可启动 b.使用 http请求接口 300 个线程设置 1 s 的预热时间 右键 start

B端:工作台页面放什么?不知道,这里告诉你10个常见内容。

工作台是B端系统的核心页面&#xff0c;也是最常用的页面&#xff0c;该页面的上通常放哪些内容了&#xff0c;是中说纷纭&#xff0c;本文把常放内容给大家列举下。 B端工作台页面是专门为企业用户设计的工作台&#xff0c;通常需要包含一些与企业工作相关的功能和信息。以下…

传知代码-让机器感受你的情绪!(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 让计算机理解你的情绪&#xff01; 随着近年来社交媒体的快速增长&#xff0c;社交媒体上的用户生成内容&#xff08;例如视频&#xff09;的量大幅增加。不同模态的自动情感分析有利于人机交互&#xff0c;并吸…

跟我一起学FPGA (二) 语法讲解

本章讲解 1 、Verilog 概述和基础知识&#xff1b; 2 、Verilog 程序框架和高级知识点&#xff1b; 3 、Verilog 编程规范。 1.Verilog 概述和基础知识 Verilog 是一种硬件描述语言&#xff0c;以文本形式来描述数字系统硬件的结构和行为的语言&#xff0c;用它可以表示逻辑电…

Vivado2018.3版本_将bit文件转化为bin文件

Vivado2018.3版本_将bit文件转化为bin文件 1、配置转换文件 2、下载到flash中

用 count(*)哪个存储引擎会更快?

InnoDB 引擎执行 count 函数的时候&#xff0c;需要通过遍历的方式来统计记录个数&#xff0c;而 MyISAM 引擎执行 count 函数只需要 0(1 )复杂度&#xff0c;这是因为每张 MyISAM 的数据表都有一个 meta 信息有存储了row_count值&#xff0c;由表级锁保证一致性&#xff0c;所…

[数据集][目标检测]鲜花检测数据集VOC+YOLO格式25215张106类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;25215 标注数量(xml文件个数)&#xff1a;25215 标注数量(txt文件个数)&#xff1a;25215 标…

给P人一点小小震撼!铁威马UI全新设计!更友好更美观~

开学了&#xff0c;小马居然发现有学校竟然玩起了新花样&#xff0c;通过MBTI来分宿舍&#xff0c;这脑洞大开的创意简直让人直呼内行&#xff01; 你是P人还是J人&#xff1f; 在MBTI人格分类中&#xff0c;J人喜欢条理清晰的计划&#xff0c;而P人则倾向于随性所欲。 想象…

第十五届北京青年相声节宣传片发布

第十五届北京青年相声节宣传片&#xff0c;围绕相声演员的四个基本功&#xff1a;说、学、逗、唱&#xff0c;搭建四个生活场景&#xff0c;编创四个微短故事&#xff0c;演绎四组人物关系&#xff0c;向大众普及“相声就在我们身边”的深刻内涵。

如何轻松的步入编程的第一课?相信你就是那个伟大的天才!

第一次编程&#xff0c;会让初学者感到既兴奋又有些紧张。以下是一些建议 明确学习目标&#xff1a;首先&#xff0c;思考你为什么想学编程。是为了职业发展、兴趣爱好、还是仅仅想了解新技术&#xff1f;明确的目标能帮你保持学习的动力。选择合适的编程语言&#xff1a;对于…

【持续更新】Solid Explorer premium2.8.48.200291文件管理器最新免费高级解锁版

Solid Explorer文件管理器高级版解锁&#xff0c;拥有诸多增强功能和额外特性&#xff0c;使其区别于标准版。 ▨ 解锁版主要特点 • 解锁高级功能&#xff1a;无限制地访问所有高级功能 • 无广告体验&#xff1a;享受无任何烦人广告的流畅用户界面 • 增强安全性&#xff1a…

软件性能测试重要性简析,好用的性能测试工具有哪些?

软件性能测试是软件开发和维护过程中一个至关重要的环节。通过性能测试&#xff0c;企业能够评估软件在不同负载下的表现&#xff0c;预测其在真实环境中的表现&#xff0c;以确保用户能获得优秀的使用体验。 软件性能测试可以被定义为一种评估软件系统的快速性、响应性、稳定…

【ShuQiHere】重新定义Linux桌面生态:Gnome-Pie与Touché的双剑合璧

【ShuQiHere】 从期待到失望的初体验 当我第一次拿到Logitech Master 3S鼠标时&#xff0c;心中的兴奋感油然而生。它精致的做工、独特的造型&#xff0c;以及舒适的握感&#xff0c;让我感觉它不仅是一款鼠标&#xff0c;更是一件工艺品。再加上令人期待的自定义手势功能&am…

RR隔离级别下还有幻读吗

文章目录 1 背景2 验证2.1 验证准备2.1.1 环境信息2.1.2 数据准备 2.2 当前读场景验证2.2.1 前言2.2.2 场景验证2.2.3 小结 2.3.快照读场景验证2.3.1 前言2.3.2 场景验证2.3.3 小结 3 分析4 总结 1 背景 InnoDB默认的事务隔离级别是REPEATABLE-READ&#xff0c;它为了解决该隔离…

数学 小朋友按如图所示的规则练习数数,1大拇指,2食指,3中指,4无名指,5小指,6无名指,…,一直数到2024的时候,是哪一个手指?

1、先上一张图&#xff1a; 如图&#xff0c;一个小朋友按如图所示的规则练习数数&#xff0c;1大拇指&#xff0c;2食指&#xff0c;3中指&#xff0c;4无名指&#xff0c;5小指&#xff0c;6无名指&#xff0c;…&#xff0c;一直数到2024时&#xff0c;对应的指头是&#xf…