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

天蝎网站建设公司企业微信一年的费用要多少

天蝎网站建设公司,企业微信一年的费用要多少,海口网红店,北京百度网讯科技有限公司题目内容 原题链接 给定一个长度为 n n n 的整数数组 a a a ,问所有子数组和的异或和是多少。 数据范围 1 ≤ n ≤ 1 0 5 1\leq n\leq 10^5 1≤n≤105 ∑ a i ≤ 1 0 6 \sum a_i\leq 10^6 ∑ai​≤106 题解 基本思路 本题是 ARC092D - Two Sequences 的同类型…

题目内容

原题链接

给定一个长度为 n n n 的整数数组 a a a ,问所有子数组和的异或和是多少。

数据范围

1 ≤ n ≤ 1 0 5 1\leq n\leq 10^5 1n105
∑ a i ≤ 1 0 6 \sum a_i\leq 10^6 ai106

题解

基本思路

本题是 ARC092D - Two Sequences 的同类型题,ARC092D 中是两个数和的异或和,而本题是两个数差的异或和。

子数组的和,自然会想到前缀和,考虑 p r e i pre_i prei p r e j pre_j prej j < i j<i j<i ,那么子数组 a j + 1 , a j + 2 , ⋯ , a i a_{j+1},a_{j+2},\cdots,a_i aj+1,aj+2,,ai 的和为 p r e i − p r e j pre_i-pre_j preiprej

考虑减法的特性,先考虑低位,低位不够了会向高位借位。

考虑和的第 k k k 位, x = p r e i m o d 2 k + 1 , y = p r e j m o d 2 k + 1 x=pre_i\bmod 2^{k+1},y=pre_j\bmod 2^{k+1} x=preimod2k+1,y=prejmod2k+1

  • x ≥ y x\geq y xy ,考虑 x − y x-y xy 的第 k k k 位是否为 1 1 1
  • x < y x<y x<y ,因为 p r e i ≥ p r e j pre_i\geq pre_j preiprej ,所以可以将 2 k + 1 2^{k+1} 2k+1 添加到 x x x
    判断 x + 2 k + 1 − y x+2^{k+1}-y x+2k+1y 的第 k k k 位是否为 1 1 1

这样的做法需要枚举 i i i j j j ,时间复杂度是 O ( n 2 ) O(n^2) O(n2) ,考虑如何优化。

优化

我们需要枚举 i i i 的同时,找到所有满足条件的 j j j

k = 2 k=2 k=2 为例,区间和为 [ 010 0 2 , 011 1 2 ] [0100_2,0111_2] [01002,01112] 以及 [ 110 0 2 , 111 1 2 ] [1100_2,1111_2] [11002,11112] 的区间是满足条件的。

  • [ 010 0 2 , 011 1 2 ] [0100_2,0111_2] [01002,01112] 对应的 p r e j pre_j prej 范围是 [ x − 011 1 2 , x − 010 0 2 ] [x-0111_2,x-0100_2] [x01112,x01002]
  • [ 110 0 2 , 111 1 2 ] [1100_2,1111_2] [11002,11112] 对应的 p r e j pre_j prej 范围是 [ x − 111 1 2 , x − 110 0 2 ] [x-1111_2,x-1100_2] [x11112,x11002]

显然这些区间都不能为负数,所以我们需要额外判断,对于 p r e i ≥ 2 k + 1 pre_i\geq 2^{k+1} prei2k+1 x x x ,就给他们加上 2 k + 1 2^{k+1} 2k+1

用树状数组来维护区间内数的个数。

时间复杂度: O ( 20 n × log ⁡ 1 0 6 ) O(20n\times \log 10^6) O(20n×log106) ,其中 20 20 20 是值域对应的二进制数的最大位数, log ⁡ 1 0 6 \log 10^6 log106 是树状数组单次操作的复杂度。

代码

#include <bits/stdc++.h>
using namespace std;const int N = 100010;
const int MAX = 1000010;
const int BIT = 20;int a[N];
int pre[N];
int tr[MAX];void update(int p, int x, int limit) {p += 1;while (p <= limit) {tr[p] += x;p += p & -p;}
}int query(int p) {p += 1;int res = 0;while (p > 0) {res += tr[p];p -= p & -p;}return res;
};int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin >> n;for (int i = 0; i < n; ++i) {cin >> a[i];pre[i + 1] = pre[i] + a[i];}int ans = 0;for (int k = 0; k < BIT; ++k) {int mod = 1 << (k + 1);int mask = mod - 1;int limit = min(MAX - 1, mod);update(0, 1, limit);int cnt = 0;for (int i = 1; i <= n; ++i) {int cur = pre[i] & mask;if (pre[i] >= mod) {cur += mod;}// L 是最小值,R 是最大值// cur 需要大于等于最小值,int L = 1 << k, R = (1 << (k + 1)) - 1;if (cur >= L) {int maxv = cur - L;int minv = max(0, cur - R);cnt ^= query(maxv) - query(minv - 1) & 1;L = 3 << k, R = (1 << (k + 2)) - 1;if (cur >= L) {maxv = cur - L;minv = max(0, cur - R);cnt ^= query(maxv) - query(minv - 1) & 1;}}update(pre[i] & mask, 1, limit);}if (cnt) ans |= 1 << k;memset(tr, 0, sizeof(int) * (limit + 1));}cout << ans << "\n";return 0;
}

一样的题,更大的数据范围

灵茶八题 - 子数组 +w^

http://www.dtcms.com/wzjs/553885.html

相关文章:

  • 网站优化排名易下拉教程学做蛋糕网站
  • 网站原创内容优化wordpress支持论坛
  • wordpress网站不安全dede网站制作
  • 燕莎做网站wordpress首页显示链接
  • 做网站 视频加载太慢网址搜索
  • 网站用自己的电脑做服务器吗设计网站 知乎
  • 网站开发与应用课程讨论定制衣柜十大品牌排名
  • 网站怎么做才美观福建省建设资格注册与管理中心网站
  • 北京东城网站建设公司网站备案详细流程
  • 厦门市建设路网站网站建设与管理考试题
  • 目前会展相关网站的建设情况手机网站开发需要哪些技术
  • 长沙模板网站建设西安企业做网站多少钱
  • 建设网站询价对比表模板网站文件下载系统
  • 网站建设是一个什么的过程做网站的数据从哪里来
  • 吉林智能建站系统价格外贸公司是干什么的
  • 杭州小程序搭建怎么样做seo
  • 品牌网站设计方案重庆app制作
  • 电商网站的功能郑州优化网站收费标准
  • 网站备份湛江网站建设技术托管
  • 宁波网站建设公司哪个好秦皇岛网站建设费用
  • 兰州网站建设ulezhi泰州网页设计需要多少钱
  • 直接用ip做网站网站建设怎么做账
  • wordpress新站SEO优化关于网站开发人员的薪资
  • 网站开店前的四项基本建设中国铁路监理建设协会网站
  • 公司如何建设网站首页网站建设和运营的成本是多少钱
  • 整站seo教程网站历史频道怎么做
  • 如何查看一个网站的访问量红玫瑰直播免费版视频
  • 重新做网站网站建设的时间
  • 甘肃网络公司网站建设网站建设项目步骤
  • 唐山市城市建设档案馆网站个人学做网站