当前位置: 首页 > news >正文

J - 二进制与、平方和(线段树 + 维护区间1的个数)

2023河南省赛组队训练赛(二) - Virtual Judge (vjudge.net)

请你维护一个长度为 n 的非负整数序列 a1, a2, ..., an,支持以下两种操作:

  1. 第一种操作会将序列 al, al + 1, ..., ar 中的每个元素,修改为各自和 x 的"二进制与"(Bitwise binary AND)的值,其中 l, r, x 在每次操作时会给定;
  2. 第二种操作会询问序列 al, al + 1, ..., ar 中所有元素的平方和模 998 244 353 的值,即 

     模 998 244 353,其中 l, r 在每次操作时会给定。

总共有 q 次操作,请你在维护序列的过程中,输出第二种操作所询问的答案。注意需要取模。

Input

第一行,一个整数 n (1 ≤ n ≤ 3 × 105),表示序列的长度。

第二行,共 n 个整数 ai (0 ≤ ai < 224),表示序列。

第三行,一个整数 q (1 ≤ q ≤ 3 × 105),表示询问的数量。

接下来 q 行,每行表示一个操作,输入有两种格式:

  1. 第一种操作的格式为 "1 l r x",表示将序列中编号在区间 [l, r] 的所有元素,修改为和 x 二进制与操作后的值,其中 1 ≤ l ≤ r ≤ n, 0 ≤ x < 224;
  2. 第二种操作的格式为 "2 l r",表示询问序列中编号在区间 [l, r] 的所有元素的平方和,模 998 244 353 的值,其中 1 ≤ l ≤ r ≤ n

数据保证至少有一个第二种操作,即保证至少询问一次答案。

Output

每当遇到第二种操作时,输出询问的答案。注意需要取模。

Sample 1

InputcopyOutputcopy
3
13 31 28
4
2 1 3
1 3 3 25
1 1 2 18
2 2 3
1914
900

Sample 2

InputcopyOutputcopy
5
9 11 12 5 1
7
2 1 3
1 3 3 0
1 1 3 9
1 4 5 13
2 1 3
1 4 5 14
2 1 5
346
162
178

Sample 3

InputcopyOutputcopy
4
16777215 16777215 16777215 16777214
4
2 2 2
1 1 4 16777214
2 1 4
2 3 4
981185168
795789897
897017125

Note

"二进制与"(Bitwise binary AND)结果的第 i 个二进制位为 1,当且仅当两个操作数的第 i 位都为 1。

题解:

关键在于如何把区间修改转化为单点修改,维护区间1的个数

注意不要用#define int long long 会被卡时间(以后线段树不要用)

具体细节会在代码中有详细注释 

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<vector>
#include<map>
#include<queue>
#include<cstdio>
using namespace std;
//#define int long long
const int N = 3e5 + 10; 
typedef long long ll;
int mod = 998244353;
#define ios ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
struct node
{int l,r,sum;int x[30];
}tre[N*4];
int w[N];
void pushup(int rt)
{tre[rt].sum = ((ll)tre[rt<<1].sum + tre[rt <<1|1].sum)%mod;for(int i = 0;i < 25;i++){tre[rt].x[i] = tre[rt<<1].x[i] + tre[rt<<1|1].x[i];//小区间的1的个数组成大区间1的个数}
}
void build(int rt,int l,int r)
{if(l == r){tre[rt].sum = (ll)w[l]*w[l]%mod;tre[rt].l = l;tre[rt].r = r;int x = w[l];for(int i = 0;i < 25;i++){tre[rt].x[i] = (x >> i&1);//建树时把每个点一个的个数统计好}return ;}tre[rt].l = l;tre[rt].r = r;int mid = (l + r) >> 1;build(rt<<1,l,mid);build(rt<<1|1,mid + 1,r);pushup(rt);
}
void updata(int rt,int l,int r,int x)
{if(tre[rt].l == tre[rt].r){int s = 0;for(int i = 0;i < 25;i++){if(tre[rt].x[i]&&x >> i&1){s |= 1 <<i;}else{tre[rt].x[i] = 0;}}//更新到某个具体时跟新每一位和x的&值tre[rt].sum = (ll)s*s%mod;return ;}if(tre[rt].l >= l && tre[rt].r <= r){bool f = 1;for(int i = 0;i < 25;i++){if(tre[rt].x[i] && (x >> i&1) ==0){f = 0;break;}}if(f)//此时区间是要求区间的一部分,符合条件不用继续向下找了return ;}int mid = tre[rt].l + tre[rt].r >> 1;if(l <= mid){updata(rt << 1,l,r,x);}if(r > mid){updata(rt << 1|1,l,r,x);}pushup(rt);}
int query(int rt,int l,int r)
{if(tre[rt].l >= l&&tre[rt].r <=r){return tre[rt].sum; }int mid = tre[rt].l + tre[rt].r >> 1;int s = 0;if(l <= mid)s = query(rt << 1,l,r);if(r> mid)s = ((ll)s + query(rt<<1|1,l,r))%mod;return s;
}
void solve()
{int m,n;scanf("%d", &n);for (int i = 1; i <= n; i++) scanf("%d", &w[i]);build(1, 1, n);scanf("%d", &m);while (m--){int p,l, r, x;scanf("%d%d%d", &p, &l, &r);if (p == 1){scanf("%d", &x);updata(1, l, r, x);}else{printf("%d\n", query(1, l, r));}}
}
int main()
{
//	ios;int t = 1;
//	cin >> t;while(t--){solve();} 
}
//3 F
//5 B
//6 F
//9 F
//10 B
//12 F
//15 FB
//18 FB

相关文章:

J - 二进制与、平方和(线段树 + 维护区间1的个数)

2023河南省赛组队训练赛&#xff08;二&#xff09; - Virtual Judge (vjudge.net) 请你维护一个长度为 n 的非负整数序列 a1, a2, ..., an&#xff0c;支持以下两种操作&#xff1a; 第一种操作会将序列 al, al  1, ..., ar 中的每个元素&#xff0c;修改为各自和 x…...

BertTokenizer的使用方法(超详细)

导入 from transformers import BertTokenizer from pytorch_pretrained import BertTokenizer以上两行代码都可以导入BerBertTokenizer,transformers是当下比较成熟的库&#xff0c;pytorch_pretrained是google提供的源码(功能不如transformers全面) 加载 tokenizer BertT…...

深度学习编译器CINN(3):编译过程中遇到的问题总结

目录 问题一:No module named XXXX 问题描述 分析与解决方案 问题二:catastrophic error: cannot open source file "float16.h"...

yum 安装mysql8数据全过程

mysql8安装方式&#xff1a;&#xff08;使用官方yum仓库&#xff09; 1. wget https://dev.mysql.com/get/mysql80-community-release-el7-4.noarch.rpm 安装 yum install mysql80-community-release-el7-4.noarch.rpm 2、生成yum源缓存 每次当我们编写了&#xff0c…...

内网vCenter部署教程一

PS:因为交换机链路为trunk,安装先登录ESXI,将端口组改为管理vlan ID(1021) 一、双击镜像,打开文件夹,目录为F:\vcsa-ui-installer\win32,双击installer.exe 二、先设置语言为中文 三、点击下一步 四、选择需要安装esxi的主机。 五、设置Vcenter虚拟机的密码...

java 进阶—线程的常用方法

大家好&#xff0c;通过java进阶—多线程&#xff0c;我们知道的什么是进程&#xff0c;什么是线程&#xff0c;以及线程的三种创建方式的选择 今天&#xff0c;我们来看看线程的基础操作 start() 开启线程 public class Demo implements Runnable {Overridepublic void run…...

hadoop的运行模式

作者简介&#xff1a;大家好我是小唐同学(๑>؂<๑&#xff09;&#xff0c;好久不见&#xff0c;为梦想而努力的小唐又回来了&#xff0c;让我们一起加油&#xff01;&#xff01;&#xff01; 个人主页&#xff1a;小唐同学(๑>؂<๑&#xff09;的博客主页 目前…...

服务器(centos7.6)已经安装了宝塔面板,想在里面安装一个SVN工具(subversion),应该如何操作呢?

首先&#xff0c;在登录进入宝塔面板&#xff0c;然后点击左侧终端&#xff0c;进入终端界面&#xff0c;如下图&#xff1a;------------------------------------------如果是第一次使用会弹出输入服务器用户名和密码&#xff0c;此时输入root账号和密码&#xff0c;即可进入…...

从智能进化模型看用友BIP的AI平台化能力

随着人工成本的上升&#xff0c;智能和自动化技术的成熟&#xff0c;企业在越来越多的场景开始应用自动化技术来替代相对标准及有规则的工作&#xff0c;同时利用智能算法来优化复杂工作及决策&#xff0c;获得竞争优势。 不同于阅读、聊天、搜索等面向终端用户的应用场景&…...

项目管理的主要内容包括哪些?盘点好用的项目管理系统软件

阅读本文您将了解&#xff1a;1、项目管理的主要内容包括哪些2、好用的项目管理软件 项目管理是为了实施一个特定目标&#xff0c;所实施的一系列针对项目要素的管理过程&#xff0c;包括过程、手段以及技术等。 通过项目管理&#xff0c;我们能够提前安排和控制项目的时间、…...

Allegro如何查看PCB上器件的库路径操作指导

Allegro如何查看PCB上器件的库路径操作指导 在做PCB设计的时候,有时需要检查PCB上器件使用的库的路径是否正确,Allegro支持快速将PCB上所有器件的库路径都列出来 如下图 如何显示这个报表,具体操作如下 点击Tools点击Report...

笔记【尚硅谷】大数据Canal教程丨Alibaba数据实时同步神器

视频教程&#xff1a;【尚硅谷】大数据Canal教程丨Alibaba数据实时同步神器教程资料&#xff1a;https://pan.baidu.com/s/1VhGBcqeywM6jyXJxtytd1w?pwd6666&#xff0c;提取码&#xff1a;6666本套教程以Canal的底层原理展开讲解&#xff0c;细致地介绍了Canal的安装部署及常…...

如何重定向命令行日志信息到指定txt文件?

如果你想把命令行的输出重定向到指定的txt文件&#xff0c;你可以使用一些符号来实现。例如&#xff0c;你可以在命令后面加上>或>>符号&#xff0c;然后指定文件名。例如&#xff1a; command > output.txt 这样就会把command的标准输出保存到output.txt文件中&…...

物理机不能访问虚拟机kali的web服务解决方案记录

目录 环境 问题描述 解决方案 知识补充 效果测试 其他思路 环境 kali&#xff08;nat模式&#xff09;&#xff0c;物理机&#xff0c;可互ping 问题描述 kali的web服务器不能在物理机上访问。 1.本机能ping通虚拟机 2.虚拟机也能ping通本机 3.虚拟机能访问自己的web …...

服务器配置 | 在Windows本地显示远程服务器绘图程序

文章目录方法1&#xff1a;在MobaXterm的终端输入指令方法2&#xff1a;在Pycharm中运行前提概要&#xff0c;需要在本地Windows端显示点云的3d可视化界面 对于点云的3d可视化一般有两种方法&#xff0c;open3d显示或者是mayavi显示。这两个库都可以使用pip install来实现安装…...

高级信息系统项目管理(高项 软考)原创论文——质量管理(2)

<...

从0开始学python -47

Python CGI编程 -2 GET和POST方法 浏览器客户端通过两种方法向服务器传递信息&#xff0c;这两种方法就是 GET 方法和 POST 方法。 使用GET方法传输数据 GET方法发送编码后的用户信息到服务端&#xff0c;数据信息包含在请求页面的URL上&#xff0c;以"?"号分割…...

【数据结构】八大经典排序总结

文章目录一、排序的概念及其运用1.排序的概念2.常见排序的分类3.排序的运用二、常见排序算法的实现1.直接插入排序1.1排序思想1.2代码实现1.3复杂度及稳定性1.4特性总结2.希尔排序2.1排序思想2.3复杂度及稳定性2.4特性总结3.直接选择排序3.1排序思想3.2代码实现3.3复杂度及稳定…...

BI的能力边界:能解决的企业问题和不擅长的领域

数字化转型本就需要借助信息化相关技术、思想来完成&#xff0c;所以说信息化建设同样是数字化转型过程中非常重要的一环&#xff0c;而这就是商业智能BI和数字化转型的关系 BI 能解决的企业问题 数据是企业的重要资产&#xff0c;也是企业商业智能BI的核心要求。通常&#x…...

金三银四面试必备,“全新”突击真题宝典,阿里腾讯字节都稳了

前言招聘旺季就到了&#xff0c;不知道大家是否准备好了&#xff0c;面对金三银四的招聘旺季&#xff0c;如果没有精心准备那笔者认为那是对自己不负责任&#xff1b;就我们Java程序员来说&#xff0c;多数的公司总体上面试都是以自我介绍项目介绍项目细节/难点提问基础知识点考…...

突破语音转换技术瓶颈:Retrieval-based Voice Conversion全平台实战指南

突破语音转换技术瓶颈&#xff1a;Retrieval-based Voice Conversion全平台实战指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-ba…...

React+GSAP实战:5种酷炫滚动动画效果完整代码分享(含ScrollTrigger配置)

ReactGSAP实战&#xff1a;5种酷炫滚动动画效果完整代码分享&#xff08;含ScrollTrigger配置&#xff09; 在现代Web开发中&#xff0c;流畅的滚动动画已经成为提升用户体验的关键因素。作为前端开发者&#xff0c;我们经常需要实现各种吸引眼球的滚动效果&#xff0c;从简单的…...

Fish Speech 1.5开源可部署:模型权重分离存储与热更新机制设计

Fish Speech 1.5开源可部署&#xff1a;模型权重分离存储与热更新机制设计 1. 引言&#xff1a;语音合成的新突破 当你听到一段自然流畅的语音&#xff0c;是否曾想过它可能完全由AI生成&#xff1f;Fish Speech 1.5正是这样一个令人惊叹的技术成果——它能够仅凭10-30秒的参…...

COMSOL 6.1 激光粉末床熔融气孔缺陷演化仿真:开启微观世界的探索之旅

COMSOL 6.1 激光粉末床熔融气孔缺陷演化仿真案例模型 本案例选用层流和流体传热模块&#xff0c;采用水平集法&#xff0c;考虑材料的热物性以及激光加工过程中的马兰戈尼效应、熔融金属表面张力、反冲压力、相变潜热、热对流和热辐射&#xff0c;建立含气孔缺陷的二维数值仿真…...

3分钟免费激活Windows和Office:KMS_VL_ALL_AIO终极指南

3分钟免费激活Windows和Office&#xff1a;KMS_VL_ALL_AIO终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗&#xff1f;Office文档突然变成只…...

LeetCode 11. Container With Most Water 题解

LeetCode 11. Container With Most Water 题解 题目描述 给你 n 个非负整数 a1&#xff0c;a2&#xff0c;...&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条…...

eNSP安装避坑指南:WinPcap/Wireshark/VirtualBox依赖关系解析

eNSP安装避坑指南&#xff1a;WinPcap/Wireshark/VirtualBox依赖关系解析 当你第一次打开eNSP安装包时&#xff0c;可能会疑惑为什么需要同时安装WinPcap、Wireshark和VirtualBox这三个看似不相关的软件。这就像组装一台精密仪器——少了任何一个螺丝&#xff0c;整台机器都无法…...

MariaDB Docker容器权限配置问题分析与解决方案

MariaDB Docker容器权限配置问题分析与解决方案 1. 问题背景 在使用MariaDB Docker容器时&#xff0c;用户遇到了远程访问权限配置失效的问题。具体表现为&#xff1a; 手动创建的远程用户&#xff08;如root%、****%、********%&#xff09;在容器重启后无法远程连接权限表中显…...

影墨·今颜模型API接口开发与调用全指南

影墨今颜模型API接口开发与调用全指南 你是不是已经成功部署了影墨今颜模型&#xff0c;看着它能在本地生成惊艳的图片&#xff0c;心里正盘算着怎么把它变成一个能对外服务的“产品”&#xff1f;比如&#xff0c;让公司的设计团队直接调用&#xff0c;或者集成到自己的应用里…...

LeetCode 热题 100 之 131. 分割回文串 51. N 皇后

131. 分割回文串 51. N 皇后 131. 分割回文串 class Solution {public List<List<String>> partition(String s) {List<List<String>> res new ArrayList<>();List<String> path new ArrayList<>();backtrack(s, 0, path, res);re…...