Sum of XOR Functions

news/2024/9/27 19:02:52

Sum of XOR Functions

题目

有一个序列 \(a\),计算:

\[\sum\limits_{l=1}^{n}\sum\limits_{r=l}^n(r-l+1)\times \bigoplus\limits_{i=l}^{r}a_i \]

思路

位运算的题,我们对于每一位进行考虑,会发现构成了很多个 \(0,1\) 序列,则我们对于每一个序列考虑价值,求和即可。

\(b\) 序列为这一位上的 \(0,1\) 序列。

对于 \(0,1\) 序列的一段区间的异或和,只有在这段区间中 \(1\) 的数量为奇数个时才为 \(1\)

我们用 \(cnt_{i,0/1}\) 表示这一位的零一序列中第 \(i\) 个位置前 \(0/1\) 出现的个数。

\(sum_{i,0/1}\) 表示:

\[\sum^{x}_{\{\bigoplus^{i}_{k = x}b_k\} = 0/1}(i - x) \]

也就是说,表示对于 \(i\) 位置前所有能满足使 \(\{ \bigoplus^{i}_{k = x} b_k \} = 1\) 的位置 \(x\) 到位置 \(i\) 的距离和。

我们发现当我们预处理完成这些数组时,就可以 \(O(1)\) 求出:\(\sum^{i}_{x = 1} \{\bigoplus^{i}_{k = x} b_k\}\) 的值了。

接下来就是 \(O(n)\) 的复杂度枚举右端点的值即可。

主要思路到此结束。

\(code\)

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
#define int long long
const int MOD = 998244353;
const int MAXN = 3e5 + 7;
int n,a[MAXN];
int cnt[MAXN][2],sum[MAXN][2];
int pre[MAXN];
int ans = 0;
signed main(){scanf("%lld", &n);for(int i = 1;i <= n;i++) scanf("%lld", &a[i]);for(int w = 0;w <= 31;w++){memset(cnt,0,sizeof(cnt));memset(sum,0,sizeof(sum));memset(pre,0,sizeof(pre));cnt[0][0] = 1;for(int i = 1;i <= n;i++){pre[i] = pre[i - 1];cnt[i][0] = cnt[i - 1][0];cnt[i][1] = cnt[i - 1][1];sum[i][0] = sum[i - 1][0];sum[i][1] = sum[i - 1][1];pre[i] += (a[i] >> w) & 1;if(pre[i] & 1) cnt[i][1]++,sum[i][1] += i;else cnt[i][0]++,sum[i][0] += i;}for(int i = 1;i <= n;i++){if(pre[i] & 1) ans = (ans + ((cnt[i - 1][0] * i - sum[i - 1][0]) % MOD) * (1 << w) % MOD) % MOD;else ans = (ans + ((cnt[i - 1][1] * i - sum[i - 1][1]) % MOD) * (1 << w) % MOD) % MOD;ans = ans % MOD;}}cout<<ans;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/65496.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

VMware安装Ubuntu操作系统 2024.9.27

1.安装 Ubuntu的官方网站是:https://www.ubuntu.com/download 点进去可以直接下载文件下载会比较慢,我这点用了约5分钟 然后就可以打开vmware,选择:就可以注册和使用了。 笔记本电脑是这样的。。 如果使用台式机,没有相应的硬件环境的话,就不要创建空的盘符了,就可以创建…

PbootCMS上传图片失败或提示:未知错误

在PbootCMS中,如果遇到上传图片失败或提示“未知错误”,可以尝试以下几个步骤来解决问题: 解决方案 1. 检查服务器空间和权限检查服务器空间:确认服务器空间是否已满。可以使用FTP客户端或服务器管理面板查看剩余空间。 如果空间不足,清理一些不必要的文件或增加空间容量。…

五上数学第1单元情况反馈204班

五上数学第1单元情况反馈204班 本周进行了数学第一单元的综合练习,已经进行了讲评。试卷已经下发,请学生带回家改完错误,家长签字。 签字在试卷的左上角,签字示范:家长阅,9月27日,或者再写一些建议与意见都可以。 下面分析一下第一单元的情况: 第一单元是本册最难的单元…

地平线静态目标检测 MapTR 参考算法-V1.0

1.简介 高清地图是自动驾驶系统的重要组件,提供精确的驾驶环境信息和道路语义信息。传统离线地图构建方法成本高,维护复杂,使得依赖车载传感器的实时感知建图成为新趋势。早期实时建图方法存在局限性,如处理复杂地图元素的能力不足、缺乏实例级信息等,在实时性和后处理复杂…

20240927 随机训练

GYM 105350 E 题目描述 给定一个大小为 \(N\) 的数组 \(A\)。 我们定义一个大小为 \(N\) 的数组 \(B\) 是有效的当且仅当:对于 \(\forall 1\le i\le N,1\le B_i \le N\),如果从 \(B\) 中移除 \(B_i\),则数组 \(B\) 恰好有 \(A_i\) 个不同的数。求有多少个不同的由有效数组 \…

apisix实现四层转发

背景 来水一篇文章,其实官网都有,论如何在apisix上实现四层转发 什么是apisix apisix是动态、实时、高性能的 API 网关,构建于 OpenResty 之上,支持热加载配置、灰度发布、蓝绿部署等功能,同时具有良好的可扩展性和易用性。 管理接口参考 参考:(以2.4版本为例) https:/…

山海鲸可视化 VS PowerBI,中外免费报表软件对比

在数据分析与可视化的时代,选择合适的报表工具显得尤为重要。山海鲸可视化和PowerBI是市场上颇受欢迎的两款免费报表软件,各有特色。接下来,我们将从功能、优缺点等方面进行对比,帮助你找到最适合的工具。 山海鲸可视化 山海鲸可视化是一款国内自主研发的报表工具,专注于用…

Crypto工具与算法

参考博客: https://lazzzaro.github.io/2020/05/10/crypto-crypto常用工具/ https://bbs.kanxue.com/thread-266504.htm https://lazzzaro.github.io/2020/05/10/crypto-crypto常用算法/工具 以windows为主python中import gmpy2与from gmpy2 import *的区别 import gmpy2 gmpy…