P11071 「QMSOI R1」 Distorted Fate题解

news/2024/11/14 13:40:07/文章来源:https://www.cnblogs.com/allforgod/p/18543635

题意:
给定一个序列,给定两种操作:

  1. 将一个区间异或上一个给定的值。

  2. 给定 \(l,r\)

\[{\large (\sum_{i=l}^r\bigcup_{j=l}^i A_j) \bmod 2^{30}} \]

\(0\le a_i,x< 2^{30}\)\(1\le l\le r\le n\)

思路

  • 由于操作数以及区间过大,一位一位地去模拟肯定是不行的。因此考虑去离线下来拆位,对于每一个操作的每一位单独维护贡献。

  • 由于是前缀或,因此对于每一位而言,只要有一个数在这一位上是1,那后面的所有值也一定都是1。
    因此问题就转化成了维护区间第一个1所在的位置,答案就是这个位置与右端点的距离。

  • 考虑如何去维护这个东西。显然去查找不可能直接找,需要去二分。但同时还要维护操作1,因此考虑用线段树去维护。
    那怎么在线段树上查找呢?考虑维护节点所代表的区间是不是全为零,如果全为零的话就向右儿子搜,否则向左儿子搜。
    但由于异或操作,还可以维护一个是否全是1方便修改。需要修改的时候将两个标记交换就可以了。

code

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int p=1073741824;
const int N=2e5+7;
int n,m,a[N],loc;bool s1[N<<2],s2[N<<2],b[N],sign,tag[N<<2];
struct ques
{int opt,l,r,x;long long ans=0;
}q[N];
#define ls (u<<1)
#define rs ((u<<1)|1)
void push_up(int u)
{s1[u]=s1[ls]|s1[rs];s2[u]=s2[ls]|s2[rs];
}
void push_down(int u)
{if(!tag[u]) return;swap(s1[ls],s2[ls]),swap(s1[rs],s2[rs]);tag[ls]^=1,tag[rs]^=1;tag[u]=0;
}
void build(int u,int l,int r)
{tag[u]=0;if(l==r){s1[u]=b[l],s2[u]=b[l]^1;return;}int mid=(l+r)>>1;build(ls,l,mid);build(rs,mid+1,r);push_up(u);
}
void modify(int u,int l,int r,int ql,int qr)
{if(l>=ql&&r<=qr) {swap(s1[u],s2[u]),tag[u]^=1;return;}int mid=(l+r)>>1;push_down(u);if(mid>=ql) modify(ls,l,mid,ql,qr);if(mid<qr) modify(rs,mid+1,r,ql,qr);push_up(u);
}
void query(int u,int l,int r,int ql,int qr)
{if((!s1[u])||sign||r<ql||l>qr) return;if(l==r) {if(s1[u]&&l<loc&&l>=ql)loc=l,sign=1;return;}int mid=(l+r)>>1;push_down(u);if(mid>=ql) query(ls,l,mid,ql,qr);if(sign) return;if(mid<qr) query(rs,mid+1,r,ql,qr);
}
int main()
{ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=m;i++) {cin>>q[i].opt>>q[i].l>>q[i].r;if(q[i].opt==1) cin>>q[i].x;}for(int k=0;k<=30;k++){for(int i=1;i<=n;i++) b[i]=(a[i]>>k)&1;build(1,1,n);for(int i=1;i<=m;i++){if(q[i].opt==1) {if(((q[i].x>>k)&1)==1) modify(1,1,n,q[i].l,q[i].r);}else{sign=0;loc=q[i].r+1;query(1,1,n,q[i].l,q[i].r);q[i].ans=(q[i].ans+1ll*(q[i].r-loc+1ll)*(1ll<<k)%p)%p;}}}for(int i=1;i<=m;i++) if(q[i].opt==2) cout<<q[i].ans<<'\n';return 0;
}

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

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

相关文章

不受支持的 Mac 上的通用控制 (现已支持 macOS Sequoia)

不受支持的 Mac 上的通用控制 (现已支持 macOS Sequoia)不受支持的 Mac 上的通用控制 适用于 macOS Sequoia、macOS Sonoma、macOS Ventura 和 macOS Monterey 请访问原文链接:https://sysin.org/blog/macos-universal-control-on-unsupported-mac/ 查看最新版。原创作品,转载…

数据库运维实操优质文章文档分享(含Oracle、MySQL等) | 2024年10月刊

本文为大家整理了墨天轮数据社区2024年10月发布的优质技术文章/文档,主题涵盖Oracle、MySQL、PostgreSQL等主流数据库系统以及国产数据库的技术实操,从基础的安装配置到复杂的故障排查,再到性能优化的实用技巧及常用脚本等。本文为大家整理了墨天轮数据社区2024年10月发布的…

windows 查看已连接的wifi密码

查看已连接的wifi列表 win+R,打开控制台窗口,输入: netsh wlan show profiles从wifi列表中查看指定wifi的秘密 1.输入指令: netsh wlan show profile name="wifi名" key=clearname要查看的wifi名称,key=clear表示显示密码。 2.查看密码 找到"安全设置"…

大厂SSP的Java学习路线

大厂SSP的Java学习路线,零基础,分阶段,极简的自学编程指南,全网最全面最贴心 小厂(入门阶段)怎么学,中厂(进阶阶段)怎么学,大厂(高级阶段)怎么学现在互联网环境这么差,Java还能学吗? 学Java还能找到工作吗? 大家好呀, 我是程序员回家养猪, 一个专升本, 三段实习经历拿…

章节一、Maven学习

一、maven介绍 1、简介 Maven是一个项目管理工具(构建工程、管理jar包、编译代码、完成测试、项目打包) Maven是基于POM(project object model 项目对象模型)实现的 Maven标准化了项目结构 Maven提供了一个免费的中央仓库 开源jar包 Maven是跨平台的 2、作用 一键构建:编译…

[GYCTF2020]Blacklist 1

[GYCTF2020]Blacklist 1 打开实例发现get提交框,提交1发现显示尝试万能密码无果尝试联合注入,显示出了过滤规则,可以见到很多关键字都被过滤了尝试堆叠注入,成功显示出数据表 ?inject=1;show databases;查表 ?inject=1;use ctftraining;show tables;看到了个FLAG_TABLE查…

Serverless GPU:助力 AI 推理加速

本文将探讨云原生 Serverless GPU 如何从根本上解决这些问题,以实现 AI 技术的高效落地。本文整理自 2024 云栖大会,阿里云智能集团高级技术专家聂大鹏、NVIDIA 解决方案架构师金国强演讲议题《Serverless GPU:助力 AI 推理加速》 近年来,AI 技术发展迅猛,企业纷纷寻求将 …

HyperWorks的shrink warp meshing

在HyperWorks中,针对某些具有复杂几何特征的零部件的网格剖分,Altair HyperMesh 向用户提供了一种名为 Shrink Warp Meshing 的技术,快捷高效地完成有限元模型前处理工作。例如在车辆碰撞分析研究中,用户可以使用 Shrink Warp Meshing 技术快速构建诸如传动系统等(具有复杂…

快速了解电源模块的使用方法 BDB10-12W系列电源模块

快速了解电源模块的使用方法 BDB10-12W系列电源模块电源是整个电路可靠工作的核心部分。然而,由于电源电路的电流和发热量较大,容易出现故障。今天我为大家介绍一下电源模块的使用方法。BOSHDIA电源模块是将电源电路集成到一个很小的PCB板上,从而实现输出稳定电压和大电流的…

GSDml结构

1. 如何方便的看到GSDml的结构在github上找到一个很好用的开源工具以及它的开源汉化,叫xml notepad,可以很好的看到设备树视图。 [2.9.0.8官方下载地址] [汉化插件]2. 文件结构总体就是header和Body两个部分ISO15745Profile | +--ProfileHeader +--ProfileBody|+--DeviceIdent…

什么是CRM系统?CRM系统在企业中扮演什么角色?

近年来,客户关系管理(CRM)系统逐渐显露头角,成为企业把握航向、驶向成功的关键。也有好多人来问关于这方面的问题,所以专门开一篇文章为大家深入了解CRM系统的含义、功能、价值以及它在现代企业中的实际应用,为的呀就是帮助大家全面把握这一概念。 一、CRM系统是什么? 客…

运行 MainApplication 时出错 运行 MainApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行

运行springboot的启动类时,报了这个错。 解决办法: 1、修改选项2、添加缩短命令行项3、选择JAR清单