首页 > 其他分享 >Sum of XOR Functions

Sum of XOR Functions

时间:2024-09-27 18:49:48浏览次数:1  
标签:Functions XOR int Sum cnt MAXN bigoplus 序列 sum

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;
}

标签:Functions,XOR,int,Sum,cnt,MAXN,bigoplus,序列,sum
From: https://www.cnblogs.com/wyl123ly/p/18436384

相关文章

  • css-functions伪类选择器系列二
    一张图浏览CSSFunctions概述本文主要讲述CSS的部分伪类选择器第二篇,包括::nth-child、:nth-last-child、:nth-of-type和:nth-last-of-type。:nth-child():nth-child伪类是根据父元素的子元素列表中的索引来选择元素。语法:nth-child是以一个参数nth来描述匹配兄弟元素......
  • 【Azure Event Hub】关于Event Hub指标 ConsumerLag 的解释
    问题描述在使用AzureEventHub的过程中,需要监控消费端是否正常消费数据?而常规的指标只有IncomingMessage,OutgoingMessage,是否指标能表明当前EventHub消费滞后,即Incoming数量远远大于Outgoing呢?IncomingMessages :发布到事件中心的消息数。OutgoingMessages :从事件中心使......
  • 【Azure Event Hub】关于Event Hub指标 ConsumerLag 的解释
    问题描述在使用AzureEventHub的过程中,需要监控消费端是否正常消费数据?而常规的指标只有IncomingMessage,OutgoingMessage,是否指标能表明当前EventHub消费滞后,即Incoming数量远远大于Outgoing呢?IncomingMessages:发布到事件中心的消息数。OutgoingMessages:从事件中心......
  • CF1207E XOR Guessing
    思路设答案为\(a\),第一次异或的数为\(b\),第二次异或的数为\(c\),则可以通过两次询问知道\(a\oplusb\)和\(a\oplusc\),所以\(b\oplusc=(a\oplusb)\oplus(a\oplusc)\)。因为范围为\([0,2^{14}-1]\),且每次询问只有\(100\)次,所以可以让第一次询问\(\{1,2,\cdots......
  • 大数据-139 - ClickHouse 集群 表引擎详解4 - MergeTree 实测案例 ReplacingMergeTree
    点一下关注吧!!!非常感谢!!持续更新!!!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(正在更新···)章节内容上节我们完成了如下的内容:MergeTree存储结构Me......
  • 文本摘要综述—从统计方法到大型语言模型综述介绍,原文阅读:A Systematic Survey of Tex
    ASystematicSurveyofTextSummarization:FromStatisticalMethodstoLargeLanguageModels文本摘要的系统综述:从统计方法到大型语言模型paper:https://arxiv.org/abs/2406.11289文章目录~原文阅读Abstract1.Introduction1.1.MajorDifferences1.2.MainContri......
  • XOR 加密简介
    XOR加密简介作者: 阮一峰日期: 2017年5月31日本文介绍一种简单高效、非常安全的加密方法:XOR加密。一、XOR运算逻辑运算之中,除了 AND 和 OR,还有一种 XOR 运算,中文称为"异或运算"。它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值......
  • uniapp精仿微信源码,基于SumerUI和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视
    uniapp精仿微信源码,基于SumerUI和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视频商城小工具等,朋友圈视频号即时聊天用于视频,商城,直播,聊天,等等场景,源码分享sumer-weixin介绍uniapp精仿微信,基于SumerUI3.0和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视频......
  • CF1446C Xor Tree
    很有意思的题目,我们考虑能连边的两个数一定是在01-Trie上距离最近的两个点。于是我们先把所有数插入到01-Trie上去,然后\(dp_u\)考虑以\(u\)为根的子树中最多能留几个数,他的两个儿子内部的点只能在内部转移,你只能取一个儿子和另一个儿子的一个,也就是说我们的转移为\(dp_u......
  • python中多维数组的cumsum的逆
    我想知道如何在Python中对多维数组进行累积和的逆运算。例如,我们可以通过PMy获得给定二维数组的累积数组T问题是,我如何从importnumpyasnpT=np.array([[1,3,2],[5,5,6],[1,8,3]])P=np.cumsum(np.cumsum(T,axis=0),axis=1)print(P)#Pisthe......