传送门

•题意

  给你一个包含 n 个数的序列 a,定义序列上的两个操作:

    (1)$1,l,r\ :\ ans=\sum_{i=l}^{r}a_i$;

    (2)$2,l,r,x\ :\ \forall\ i \in[l,r],a_i = a_i\ xor\ x$;

  输出操作(1)对应的 ans 值;

•题解

  因为是异或操作,而异或设计的运算都是在二进制上进行的;

  所以考虑按照二进制位建立线段树;

  对于每个叶节点,将对应的数转化成二进制的每一位存入到节点信息中;

  然后就是区间更新,区间查询操作;

•Code

  CodeForces242E(1).cpp

•CF242E升级版

  题目来源与 【2019ICPC亚洲区域赛银川赛站网络预选赛A. Simple Data Structures】

  相比于 CF242E 这道题,对序列的操作增加了两个:

    (1)$1,l,r\ :\ ans=\sum_{i=l}^{r}a_i$;

    (2)$2,l,r,x\ :\ \forall\ i \in[l,r],a_i = a_i\ xor\ x$;

    (3)$2,l,r,x\ :\ \forall\ i \in[l,r],a_i = a_i\ |\  x$

    (4)$2,l,r,x\ :\ \forall\ i \in[l,r],a_i = a_i\ \&\  x$

•思路

  和上题思路差不多,考虑到开 20 棵线段树维护以上操作;

  难点在于如何 lazy,以及如何 pushDown();

  考虑到 ^,|,& 的特点;

  对于某个数的二进制的第 i 位,假设为 bit[i];

  易得 bit[i] ^ 0 = bit[i] , bit[i] | 0 = bit[i] , bit[i] &1 = bit[i];

     bit[i] ^ 1 : 相当于反转 bit[i];

     bit[i] | 1 = 1;

     bit[i] & 0 = 0;

  也就是说只有后三个操作才有用;

  考虑到 bit[i] 可能在这之前不止做依次操作;

  但是有一点可以肯定,遇到 bit[i] | 1,bit[i] = 1,不管其之前做过何种操作;

  同样,遇到 bit[i]&0,bit[i]=0;

  而如果先遇到 &0 , 在遇到 ^ 1,相当于将 bit[i] 赋值为 1;

  反之,如果先遇到 |1 , 在遇到 ^ 1,相当于将 bit[i] 赋值为 0;

  这样的话,定义 lazy 有四个取值:

    $lazy=\begin{cases} -1\ ,\ no\ operate\\ \ 0\ \ ,\ become\ 0 \\ \ 1\ \ ,\ become\ 1 \\ \ 2\ \ ,\ reverse\end{cases}$;

  向下传递懒惰标记的时候,要结合父节点的 lazy 和子节点的 lazy 进行更新;

•Code

  CodeForces242E(2).cpp

CodeForces 242E "XOR on Segment"(线段树)的更多相关文章

  1. codeforces 242E. XOR on Segment 线段树

    题目链接 给n个数, 两种操作, 一种是求区间内的数的和, 一种是将区间内的数异或x. 异或x没有什么思路, 单个异或肯定超时, 区间异或也没有办法做....后来才知道可以按位建线段树, 这样建20棵 ...

  2. codeforces 22E XOR on Segment 线段树

    题目链接: http://codeforces.com/problemset/problem/242/E E. XOR on Segment time limit per test 4 seconds ...

  3. codeforces 242E - XOR on Segment (线段树 按位数建树)

    E. XOR on Segment time limit per test 4 seconds memory limit per test 256 megabytes input standard i ...

  4. CodeForces 242E - XOR on Segment 二维线段树?

    今天练习赛的题....又是线段树的变换..拿到题我就敲了个点更新区间查询的..果断超时...然后想到了可以将每个数与合表示成不进位的二进制数..这样就可以区间进行更新了..比赛的时候写搓了..刚重写了 ...

  5. Codeforces Round #149 (Div. 2) E. XOR on Segment (线段树成段更新+二进制)

    题目链接:http://codeforces.com/problemset/problem/242/E 给你n个数,m个操作,操作1是查询l到r之间的和,操作2是将l到r之间的每个数xor与x. 这题 ...

  6. XOR on segment(线段树区间异或更新)

    原题传送门 本题大意:给定n个数字和m个操作,操作共有两种,第一种是求解区间l到r上元素的和,第二种是将区间l到r的元素都异或一个x,作为某个位置的新值. 很容易想到线段树维护区间和,但是我们发现,在 ...

  7. codeforces Good bye 2016 E 线段树维护dp区间合并

    codeforces Good bye 2016 E 线段树维护dp区间合并 题目大意:给你一个字符串,范围为‘0’~'9',定义一个ugly的串,即串中的子串不能有2016,但是一定要有2017,问 ...

  8. luogu P2574 XOR的艺术 (线段树)

    luogu P2574 XOR的艺术 (线段树) 算是比较简单的线段树. 当区间修改时.\(1 xor 1 = 0,0 xor 1 = 1\)所以就是区间元素个数减去以前的\(1\)的个数就是现在\( ...

  9. CodeForces 516C Drazil and Park 线段树

    原文链接http://www.cnblogs.com/zhouzhendong/p/8990745.html 题目传送门 - CodeForces 516C 题意 在一个环上,有$n$棵树. 给出每一 ...

随机推荐

  1. C++之正则表示,字符串是否为全字母或者全数字

    bool isLetter(std::string& inputtext){ tr1::regex reg("^[A-Za-z]+$"); bool bValid = tr ...

  2. iOS 自定义 URL Scheme 完全指南

    http://www.cocoachina.com/industry/20140522/8514.html “”   阅读器 自定义URL Scheme 本文转自Migrant的博客,原文:<T ...

  3. 记UWP开发——多线程操作/并发操作中的坑

    一切都要从新版风车动漫UWP的图片缓存功能说起. 起因便是风车动漫官网的番剧更新都很慢,所以图片更新也非常慢.在开发新版的过程中,我很简单就想到了图片多次重复下载导致的资源浪费问题. 所以我给app加 ...

  4. 并发模式与 RPS 模式之争,性能压测领域的星球大战

    本文是<如何做好性能压测>系列专题分享的第四期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论 ...

  5. 弘康人寿基于 RocketMQ 构建微服务边界总线的实践

    随着互联网+和平台化战略的兴起,各个行业的 IT 系统都在向互联网架构发展,涉及的主要技术包括微服务.消息和弹性计算等,采用微服务架构实现服务高内聚.低耦合,通过异步消息完成交易快速响应和高并发.由于 ...

  6. Sentinel 1.5.0 正式发布,引入 Reactive 支持

    近日,流控降级组件 Sentinel 的又一个里程碑版本 1.5.0 正式发布. 该版本引入 Reactive 的支持,并提供多项新特性与改进.从 1.5.0 版本开始,Sentinel 仅支持 JD ...

  7. CSS权值比较(读书笔记)

    1.继承0.1    标签1    类选择符10    ID选择符100 2.层叠:后面的样式会覆盖前面的样式. 3.内联样式表(标签内部) > 嵌入样式表(当前文件中) > 外部样式(外 ...

  8. 使用 Apachetop 实时监测web服务器运行状况

    转自 http://42.96.169.71/blog/2013/01/26/shi-yong-apachetop-shi-shi-jian-ce-webfu-wu-qi-yun-xing-zhuan ...

  9. "NetworkError: 404 Not Found fontawesome-webfont.woff?v=4.0.3

    This worked for me: Add the following lines to your web.config <system.webServer> <staticCo ...

  10. activemq入门demo

    创建maven工程,pom文件如下 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...