cf 242 E XOR on Segment

状态错误CS0234命名空间“Windows”中不存在类型或命名空间名“Management”(是否缺少程序集引用?) 解决源码编译UE打包失败问题 阅读详情

E XOR on Segment

题目大意

在这里插入图片描述

主要思路

由于异或和求和并没有什么性质

通常处理异或的两种方式一种为做前缀和,显然与本题没什么关系

另一种就是拆位

我们考虑讲每一位的状态作为一颗线段树,线段树维护的就是n个数每个数的第i位是1还是0

有两种操作

  • 第一种求和,我们在线段树中对每一位1的个数求和乘2的多少次方就是这一位上的和,把l~r区间的所有位的和加起来即可
  • 第二种对l~r区间异或x,我们也将x拆位,对于每一位而言
    • 如果是0,则对l~r区间的数没有影响
    • 如果是1,那么区间内所有0将变成1,所有1将变成0,也就是1和0的个数互换

于是我们线段树维护每一位上所有区间中1的个数,懒标记为改区间异或1的次数

更具体的细节看代码

AC代码
#include <bits/stdc++.h>

using namespace std;
#define debug(a) cout << #a << " = " << a << endl;
#define x first
#define y second
typedef long long ll;
const int N = 100001, mod = 1e9+7;

struct node
{
    int l, r;
    ll sum, lazy;//维护1的个数,和懒标记:区间异或1的次数
}tr[21][N * 4];

int n, m, a[N];

void pushup(int t, int u)
{
    tr[t][u].sum = tr[t][u << 1].sum + tr[t][u << 1 | 1].sum;
}

void pushdown(int t, int u)
{
    if(tr[t][u].lazy)//如果有懒标记
    {
        tr[t][u << 1 | 1].lazy += tr[t][u].lazy;
        tr[t][u << 1].lazy += tr[t][u].lazy;
        if(tr[t][u].lazy % 2)//如果父节点的异或1的次数为奇数时子节点才需修改
        {
            tr[t][u << 1].sum = (tr[t][u << 1].r - tr[t][u << 1].l + 1) - tr[t][u << 1].sum;
            tr[t][u << 1 | 1].sum = (tr[t][u << 1 | 1].r - tr[t][u << 1 | 1].l + 1) - tr[t][u << 1 | 1].sum;
        }
        tr[t][u].lazy = 0;//清空
    }
}

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

int query(int t, int u, int l, int r)
{
    if(l <= tr[t][u].l && r >= tr[t][u].r) return tr[t][u].sum;
    else
    {
        pushdown(t, u);
        int mid = tr[t][u].l + tr[t][u].r >> 1;
        int res = 0;
        if(l <= mid) res += query(t, u << 1, l, r);
        if(r > mid) res += query(t, u << 1 | 1, l, r);
        return res;
    }
}

void modify(int t, int u, int l, int r)
{
    if(l <= tr[t][u].l && r >= tr[t][u].r)
    {
        tr[t][u].lazy++;
        tr[t][u].sum = (tr[t][u].r - tr[t][u].l + 1) - tr[t][u].sum;//因为只有异或1才会修改,所以一定修改sum
    }
    else
    {
        pushdown(t, u);
        int mid = tr[t][u].l + tr[t][u].r >> 1;
        if(l <= mid) modify(t, u << 1, l, r);
        if(r > mid) modify(t, u << 1 | 1, l, r);
        pushup(t, u);
    }
}

int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];
    cin >> m;
    
    for(int i = 0; i < 21; i++)//每一位建立线段树
    {
        build(i, 1, 1, n);
    }
    
    while(m--)
    {
        int t, l, r;
        cin >> t >> l >> r;
        if(t == 1)
        {
            ll ans = 0;
            for(int i = 0; i < 21; i++)
            {
                ans += ((ll)query(i, 1, l, r) << i);//查询每一位l~r中1的个数再乘2的i次方就是这一位的和
            }
            cout << ans << endl;
        }
        else
        {
            int x;
            cin >> x;
            for(int i = 0; i < 21; i++)
            {
                if((x >> i) & 1)//如果是1再修改当前位
                {
                    modify(i, 1, l, r);
                }
            }
        }
    }
    return 0;
}
告别零碎资料!手把手教你搞定ASTER L1T数据的预处理全流程(附ENVI实操) 本文详细介绍了ASTER L1T数据的预处理全流程,包括数据获取、质量检查、ENVI实操步骤(辐射定标、大气校正、几何精校正)以及热红外波段深度处理。特别适合地信领域初学者和研究人员,帮助快速掌握ASTER L1T数据处理技巧,提升定量反演研究效率。 阅读详情

相关推荐

用友BIP培训资料-设计采购订单新增API接口开发

14.在子实体的String pkMeas = order_hhrSlave0VOJson.getString("pk_meas");Openapi路径:nccloud/api/pu/order_hhrmanage/order_hhrMaster/addAggOrder_hhrMasterVO。实现接口的开发部署,通过openAPI的test类,实现一条数据的插入。16.进入自己的Idea打开老师发的TestOpenApi并且编译完成后如下。12.编写检测是否字段中是否含有中文的方法。

m0_68497879的博客 1547

CF242E XOR on Segment(线段树)

题目 给定一个长为n(n<=105n(n<=10^5n(n<=105)的数组 数组里的数不超过10610^6106 有两种操作: 1:求sum[l,r]sum[l,r]sum[l,r] 2:对[l,r][l,r][l,r]中的所有数和xxx异或 题解 线段树很可写的亚子。 一般线段树区间修改的时候采用懒标记的方式,而对于xorxorxor这种操作,懒标记是行不通的的。 那么我们...

MILLOPE的博客 375

KMS服务器一键部署与激活实战指南

本文详细介绍了KMS服务器的一键部署与激活实战指南,包括快速入门、安装步骤、服务管理技巧及常见问题排查。特别针对Windows和Mac用户提供了Office激活的具体操作步骤,并分享了高级配置与优化方案,帮助IT管理员高效管理批量授权激活。

weixin_29305313的博客 461

CF 242E XOR on Segment(二维线段树)

XOR on Segment time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output You've got an array a, consisting of n integers a1, a2, 

WEYuLi的专栏 1075

loadStop的原因导致的SSUSP

Total内存值是可用来调度的可用内存,当前可用内存为 0M。 loadSched和loadStop的阈值是根据 Total 内存和节点内存来做限制的。 loadStop 50G,现在有大量作业SSUSP,说明之前某个时间点该节点内存可能有低于50G的时候,导致作业SSUSP,具体是否是这个原因引起的需要用 bjobs -l JobID 看下作业的详细信息。 如果是loadStop的原因导致的 SSUSP,根据loadStop设置的阈值,Total 值高于loadStop值后,将逐步恢复挂起的作业

Blueberry521的博客 667

以阿克曼转向车为例对URDF和XACRO文件进行解读

   最近我在古月学院购买了在Gazebo中实现阿克曼转向车的仿真课程,课程资料的阿克曼小车的XACRO文件在Gazebo里加载的时候报了三个错误,在这之前,我没接触过URDF或XACRO文件,本篇文章就以这个阿克曼小车的XACRO文件为例,对URDF或XACRO文件的格式和内容进行解读,期望经过解读和学习,找到错误原因及所在,并解决这三个错误    先来放一下上面右图所示的模型的完整的XACRO文件: <?xml version="1.0"?> <!-- racecar.urdf.x

慕羽★的博客 3702

CF 242E XOR on Segment 【线段树】

两种操作: 1、求区间和 2、对区间上的每一个数进行异或(xor)运算 直接维护区间和的话区间更新无法进行,所以,要维护的信息是区间内按位和(即每个二进制位出现的次数),那么进行xor运算的时候,只需要进行0 和 1的转换就可以了。 这样的话,就是一个基本线段树+延迟操作+维护各个二进制位信息。 #include #include using namespace st

智障 1766

一文搞定 ST22 短转储 MEMORY_NO_MORE_PAGING:看懂 SAP Paging 机制,参数 rdisp/PG_SHM 与 rdisp/PG_MAXFS 怎么设才稳

SAP系统MEMORY_NO_MORE_PAGING错误通常源于Paging资源耗尽而非物理内存不足。关键排查点包括:通过ST22确认错误类型,ST02监控Paging使用情况,检查工作进程trace中的"no more free blocks"提示。解决方案建议将rdisp/PG_SHM和rdisp/PG_MAXFS设为相同值(如250000块≈2GB),使Paging完全在内存中运行。同时需优化易耗Paging的代码逻辑,如避免滥用EXTRACT命令和超大内存对象传输。典型案例如月末

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 335

CF-242E XOR on Segment [线段树]

题目链接 题意:有n个数,m个操作。操作有两种,操作1是查询 [l, r] 的区间和,操作2是将区间 [l, r] 的每一位异或x。 思路:按二进制位建树,每个节点用于统计1的个数,添加懒惰标记,记录该节点是否异或,同时需要异或是就用该节点的区间长度减去1的个数更新 感想:线段树真神奇 #include <bits/stdc++.h> const int maxn = 100...

jizhihong的博客 278

开关电源和线性电源Multisim电路仿真实验汇总——硬件工程师笔记

本文系统介绍了稳压电源的基础知识与应用实验。首先阐述了稳压电源的定义与类型,包括线性稳压电源(如LM7805/7905)和开关稳压电源(降压/升压/升降压式)的工作原理、参数特点及优劣势。随后详细讲解了各类稳压电源的实验设计,如线性稳压电源的电路实现、开关稳压电源的PWM控制方法等。最后汇总了硬件工程师相关的笔试面试资源,涵盖器件知识、电路仿真、企业真题等内容。全文结合理论分析与Multisim仿真,为电子工程学习者提供了稳压电源的实用技术参考。

XU157303764的博客 1640

手把手教你完成YOLOv8 PyQt5和PySide6目标检测界面搭建,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。YOLO系列模型由于其高效的检测速度和较高的准确率,成为目标检测任务的首选算法之一。本项目结合 YOLOv8 与 PyQt5,构建了一个图形化界面,便于用户进行目标检测的操作和展示,实现对图片、视频和摄像头的实时目标检测,不仅可以用于大论文的工作量展示,还可以作为毕业设计。支持目标检测、目标分割等模型进来检测

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1万+

CF242E XOR on Segment【题解】线段树按位维护

题面:https://www.luogu.org/problem/CF242E 因为XOR的lazy tag不可以叠加。 所以就弄得比较麻烦。 需要把每个数二进制拆分。 也把lazy tag二进制拆分。 0异或一个数还是那个数,1异或一个数就是取反。 所以遇见tag的第i位为1的时候就用总数减去现在的这位为1的个数。 然后所有都用线段树维护就行了。 代码如下: #i...

dazhishu2366的博客 210

请尽可能地详细说明一个VLA项目的立项训练到落地的全流程

一个机器人VLA项目的全流程是一个复杂的系统工程,它深度融合了机器人学 (Robotics)计算机视觉 (CV)和自然语言处理 (NLP)。其核心挑战在于高质量数据的获取和从仿真到现实的有效迁移。与纯粹的软件AI项目相比,它增加了硬件、物理交互和安全性的维度,但其最终能让AI走出虚拟世界、在物理世界中产生实际价值,这也是其巨大的魅力所在。

具身机器人和通用AI 303

CF242E XOR on Segment

这题其实真的不难,而且氵一道 2000 的在洛谷上紫色的题目真的很爽。 这题一上来很容易想到线段树,也就是加法乘法变成了异或,直接维护 xor 不大容易,因为异或的区间和不可以累加,所以这个想法肯定是不行的。 但是注意到这是位运算 xor,它一个很重要的性质就是每一位相互独立,而我们的每一位的每次修改无非就是取反,求和,十分好做,于是对于每个整数,考虑转化成这样的问题,也就是把每一位拆开而已,于是我们可以开大约 log⁡2(106)\log_2(10^6)log2​(106) 个维护 01 求和的线段树,所

m0_59024001的博客 281

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

[CF242E]XOR on Segment

Codeforces 数据结构

YveH 697

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

CF 242E XOR on Segment

题目链接:http://codeforces.com/problemset/problem/242/E 题目大意: 给定一个长为n(n 1:求sum[l,r];       2:对[l,r]中的所有数和x异或 题目思路: 一看题目,摆明了是成段更新的线段树,但是异或不符合分配律的( (a+b)^x != a^x+b^x ) ,但是我们知道异或对于一个数上的二进制表达式的

Go.To.AC的专栏 708

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【题解】 CF242E XOR on Segment

\(Description:\) 要智慧的我们帮助可爱的小小迪,设计一个数据结构支持区间求和,区间异或修改 \(Sample\) \(Input:\) 5 4 10 3 13 7 6 1 2 4 2 1 3 3 1 2 4 1 3 3 2 2 5 5 1 1 5 \(Sample\) \(Output:\) 26 22 0 34 对于每一个数x考虑把他拆开,拆成二进制,用\(log_2...

weixin_33698823的博客 131

(线段树、异或拆位)洛谷 P2574 XOR的艺术/CF242E XOR on Segment 题解

给定一个长度为n的、只含有数字01的字符串和两种操作。对于每种操作,给定oplrop0表示将字符串的lr区间内的0变成11变成0。op1表示询问字符串的lr区间内有多少个字符1。

m0_60506105的博客 1169

CF242E XOR on Segment 线段树

Link 线段树 2000 题意 给定长度为 nnn 的序列,两种操作 1.求区间 [L,R][L, R][L,R] 的和。 2.将区间 [L,R][L, R][L,R] 中的每个元素异或上 xxx。 思路 cnt[p][i] 表示 ppp 节点所管辖的数中的二进制的第 iii 位为1的个数。 易得操作一即为∑\sum∑ cnt[p][i]*(1<<i)。 考虑操作2,注意到如序列{0, 1, 1},若xor1,则变为{1, 0, 0},否则不变。 也就是说若 xxx 在二进制下某位为1,则区间

Strezia的博客 258

CF242E XOR on Segment(线段树加二进制拆分)

洛谷题目链接https://www.luogu.com.cn/problem/CF242E 题目大意 :给你一个长度为n的序列a,有两种操作 1 对[l,r]区间求和; 2 对[l,r]区间的每一个数异或上x; 解析 :标准的线段树区间求和以及区间修改,首先异或的一个性质,你对一个区间异或上n个数,无论先后顺序,最后结果都一样,因此很容易想到直接用一个懒标记来存要异或的数字,不到迫不得已不下推。问题的关键在于,懒标记如何下推,以及区间如何更新,如果你单纯那数字来进行操作,显然行不通,因为a^c+b.

qq_35769414的博客 338

Solution:CF242E(XOR on Segment)

分块过拆位线段树(

Unnamed_Cube的博客 387

「CF242E」XOR on Segment 解题报告

题面 长度为\(n\)的数列,现有两种操作: 1、区间异或操作 2、区间求和操作 对于每个查询,输出答案 思路: 线段树+二进制拆位 线段树区间修改一般使用的都是懒标记的方法,但是对于异或,懒标记的方法显然是行不通的,于是就考虑二进制拆位 主要的思路就是将一个数,拆成若干个二进制位,然后对于异或操作,就转换成了每一位上的异或操作 分类讨论一下: 1、当\(x\)的第\(i\)位为\(1\)时,\(...

weixin_30360497的博客 110

CF 242E (XOR ON SEGMENT)线段树维护区间异或,求和

题意: 一个定长的数组,然后他有两个操作; ①查询区间 【L,R】的区间和。 ②一个更下新操作,对区间【L,R】内的数分别与一个固定的值X做异或操作,结果作为这个位置的新的值。 思路: 异或操作是在二进制的基础上进行的,所以我们开20棵线段树,每一颗线段树 去维护一个二进制位的1个数。 至于为什么存1的个数,我们来看看一个例子。 例如,一个数组有四个数字,1到4分别为5,6,7,8; 他们的 二进...

laaahu的博客 1143

2.CF242E XOR on Segment 线段树维护区间反转

要求实现区间求和,区间异或 对每个二进制位维护一棵线段树,实现区间异或可以通过对该位求补集大小实现

HeartFireY的博客 461

CF242E XOR on Segment (线段树+二进制拆位)

题目大意 涉及区间内的异或,我们可以把每个数看成二进制,由于1e6<2^20 ,所以最多有二十位 。 用二十棵线段树维护二进制下的20位。 每棵线段树涉及的操作就是区间求合 区间翻转啦。 #include<bits/stdc++.h> using namespace std; #define ll long long const int maxn = 1e5+7; const ll inf = 34359738370; int tree[maxn<<2][21],tag[ma

矮纸斜行闲作草 345

CF 242E-XOR on Segment(线段树区间处理+二进制)

Description You've got an array a, consisting of n integers a1, a2, ..., an. You are allowed to perform two operations on this array: Calculate the sum of current array elements on the segment

Halo 1067
上一篇: Codeforces Round #746 (Div. 2)
下一篇: Educational Codeforces Round 115 (Rated for Div. 2)
zhbbbb!
博客等级 码龄7年 43粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值