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

LG P5127 子异和 Solution

Description

对于序列 aaa,设 f(a)f(a)f(a)aaa 的所有非空子序列的 xor⁡\operatorname{xor}xor 和之和。
给你一棵 nnn 个点的树 TTT,每个点有点权 wiw_iwi,你需要执行 qqq 次操作,操作分两种:

  • 1 u v:设 aaau→vu\to vuv 路径上的所有点权构成的序列,求 f(a)mod(109+7)f(a)\bmod (10^9+7)f(a)mod(109+7)
  • 2 u v k:对于 u→vu\to vuv 路径上的每个点 xxx 执行 wx←wxxor⁡kw_x\gets w_x\operatorname{xor}kwxwxxork

Limitations

1≤n,q≤2×1051\le n,q\le 2\times 10^51n,q2×105
1≤u,v≤n1\le u,v\le n1u,vn
0≤ai,k≤109+70\le a_i,k\le 10^9+70ai,k109+7
1s,125MB1\text{s},125\text{MB}1s,125MB

Solution

根据 P5390,可以得到 f(a)=(or⁡i=1tai)×(2t−1)f(a)=(\operatorname{or}_{i=1}^{t} a_i)\times (2^t-1)f(a)=(ori=1tai)×(2t1),其中 tttaaa 的长度。
现在问题转化为:链上 xor⁡\operatorname{xor}xor 一个数,链上 or⁡\operatorname{or}or 和,直接树剖拍到序列上。

接下来考虑序列上的问题,用线段树维护,每个节点存储两个整数 p,qp,qp,q,其中 ppp 表示所管辖区间的 and⁡\operatorname{and}and 和(即每位是否全 111),qqq 表示区间所有数取反后的 and⁡\operatorname{and}and 和(即每位是否全 000),那么答案就是 qqq 取反后的值。

对于修改,考虑实际意义,对于 ppp,新的全 111 位显然包含翻转过的全 000 位和未翻转的全 111 位,qqq 同理,代码如下(一定要用 unsigned,这样取反才是对的):

struct tag {unsigned x;inline tag() : x(0) {}inline tag(unsigned x) : x(x) {}inline void apply(const tag& t) { x ^= t.x; }
};struct info {unsigned one, zero;inline info() : one(0), zero(0) {}inline info(unsigned one, unsigned zero) : one(one), zero(zero) {}inline void apply(const tag& t) {*this = *this ^ t.x;}inline info operator^(unsigned x) const {return {(one & ~x) | (zero & x), (zero & ~x) | (one & x)};}inline info operator+(const info& b) const {return {one & b.one, zero & b.zero};}
};

那么这题就做完了,完整代码不给了,时间复杂度 O(qlog⁡2n)O(q\log^2 n)O(qlog2n)

http://www.dtcms.com/a/388712.html

相关文章:

  • 从位运算角度重新理解树状数组
  • 从零开始构建Kubernetes Operator:一个完整的深度学习训练任务管理方案
  • 关于CAS的ABA问题的原因以及解决?
  • C语言(长期更新)第16讲:字符和字符串函数
  • c过渡c++应知应会(2)
  • 分析下kernel6.6中如何获取下一次的cpu频率
  • 22.4 单卡训练T5-Large!DeepSpeed ZeRO-2让12GB显存hold住770M参数模型
  • 《Linux 常用 C 函数参考手册》更新 2.0 版本啦!适合 C 语言开发者、Linux 系统程序员、嵌入式开发者使用
  • str.maketrans() 方法
  • 漫谈:C语言 C++ 声明和定义的区别是什么
  • Java企业级开发中的对象类型深度解析:PO、Entity、BO、DTO、VO、POJO 使用场景、功能介绍、是否必须、总结对比
  • 从弱 AI 到通用人工智能(AGI):核心技术壁垒与人类社会的适配挑战
  • 数据序列化语言---YAML
  • Dify: Step2 Dify模型配置 Dify, Docker,ollama是什么关系
  • SSH连接排故排查
  • 【DMA】DMA架构解析
  • STM32HAL库-移植mbedtls开源库示例(一)
  • MAP的具体实现
  • 排序不等式的推广,对于任意两个数列的推广
  • 9.7.3 损失函数
  • Java Web开发的基石:深入理解Servlet与JSP​
  • pyOCD发布V0.39版本(2025-09-17)
  • kernel侧CPU是怎样判断共享的?
  • pcl案例六 基于配准的无序抓取
  • 动态库和静态库的链接加载
  • 离线安装docker镜像
  • MySql索引性能优化
  • 【实战指南】WAF日志分析系统的生产部署:性能调优与最佳实践
  • OKZOO联合非小号TKW3,海上ALPHA WEB3派对启航
  • Java工程代码架构度量:从DSM到构建工具的深度实践