传送门

•题意

  给你一个包含 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. Redis 扫盲

    Redis扫盲 非关系型数据库分类: 键值存储数据库:主要会使用到一个 Hash 表,这个表有一个特定的键和一个指针指向特定的数据,Redis 列存储数据库:应对分布式存储的海量数据,键仍然存在,但是 ...

  2. Leetcode690.Employee Importance员工的重要性

    给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id. 比如,员工1是员工2的领导,员工2是员工3的领导.他们相应的重要度为15, 10, 5.那么员工1的数据结构是[1 ...

  3. Wireshark抓包常见问题解析(转)

    1. tcp out-of-order(tcp有问题) 解答: 1). 应该有很多原因.但是多半是网络拥塞,导致顺序包抵达时间不同,延时太长,或者包丢失,需要重新组合数据单元 因为他们可能是通过不同的 ...

  4. 基于jQuery,bootstrap的bootstrapValidator的学习(一)

    bootstrap:能够增加兼容性的强大框架. 因为移动端项目需要数据验证,就开始学习了bootstrapValidator . 1.需要引用的文件: css: bootstrap.min.css b ...

  5. 修正Thinkphp 3.2 分页Page类以支持URL路由

    http://www.thinkphp.cn/topic/22114.html 最终目的实现以http://www.fl900.com/product/lists/1-0-0-1.html这样的URL ...

  6. 云数据库RDS存储能力进化解析!

    数据库是企业IT系统的核心,其性能表现会直接影响整体业务系统的性能表现,而影响数据库性能因素包括系统架构设计.应用程序业务SQL语句.数据库参数优化配置.数据库运行的资源能力.系统架构设计和应用程序业 ...

  7. 阿里小二的日常工作要被TA们“接管”了!

    昨天有人偷偷告诉我说 阿里巴巴其实是一家科技公司! 我想了整整一夜 究竟是谁走漏了风声 那么重点来了,阿里到底是如何在内部的办公.生活中,玩转“黑科技”的呢? AI取名:给你专属的“武侠”花名 花名是 ...

  8. Hdu 4810

    2014-05-02 15:53:50 题目连接 2013年南京现场赛的题目,现场的时候,排在我们前面的队伍基本都过了这题,我们后面的队伍也有不少过了这题,唯独我们没有.. 后来是Qingyu Sha ...

  9. JAVA高级特性--String/StringBuffer/Builder

    String String对象一旦创建就不能改变 是常量 需要进行大量字符串操作应采用StringBuffer/StringBuilder  最终结果转换成String对象 StringBuffer ...

  10. 2019-4-7-VisualStudio-解决方案筛选器-slnf-文件

    title author date CreateTime categories VisualStudio 解决方案筛选器 slnf 文件 lindexi 2019-04-07 11:34:59 +08 ...