题解:对每一位分别考虑贡献

先求前缀和

按照二进制减法分类讨论,求出最终这一位是1还是0

用树状数组维护

注意:树状数组对0这个位置单独考虑

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int u=1000000;
const int maxn=100009; int n;
int ans;
int a[maxn]; inline int lowbit(int x){
return x&(-x);
}
inline int Ct(int x,int y){
return x%(1<<y);
}
struct FenwickTree{
int c[u+10];
int cnt0;
void Add(int x,int val){
if(x==0){
cnt0+=val;
}else{
while(x<=u){
c[x]+=val;
x+=lowbit(x);
}
}
}
int Querysum(int x){
int ret=0;
while(x){
ret+=c[x];
x-=lowbit(x);
}
return ret+cnt0;
}
void Cle(){
cnt0=0;
memset(c,0,sizeof(c));
}
}T[2]; int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%d",&a[i]);
for(int i=1;i<=n;++i)a[i]+=a[i-1]; for(int j=1;j<=21;++j){
T[0].Cle();T[1].Cle();
T[0].Add(0,1);
for(int i=1;i<=n;++i){
int tmp=Ct(a[i],j-1);
int cnt=0;
if(a[i]&(1<<(j-1))){
cnt+=T[0].Querysum(tmp);
cnt+=(T[1].Querysum(u)-T[1].Querysum(tmp));
T[1].Add(Ct(a[i],j-1),1);
}else{
cnt+=(T[0].Querysum(u)-T[0].Querysum(tmp));
cnt+=T[1].Querysum(tmp);
T[0].Add(Ct(a[i],j-1),1);
}
if(cnt%2!=0)ans^=(1<<(j-1));
}
}
cout<<ans<<endl;
return 0;
}

  

BZOJ 4888 [Tjoi2017]异或和的更多相关文章

  1. BZOJ.4888.[TJOI2017]异或和(树状数组)

    BZOJ 洛谷 \(Description\) 求所有区间和的异或和. \(n\leq 10^5,\ \sum a_i\leq 10^6\). \(Solution\) 这样的题还是要先考虑按位做. ...

  2. 【BZOJ4888】[TJOI2017]异或和(树状数组)

    [BZOJ4888][TJOI2017]异或和(树状数组) 题面 BZOJ 洛谷 题解 考虑每个位置上的答案,分类讨论这一位是否存在一,值域树状数组维护即可. #include<iostream ...

  3. 【bzoj4888】: [Tjoi2017]异或和 BIT-乱搞

    [bzoj4888]: [Tjoi2017]异或和 题目大意:给定一个序列,求这个序列所有的连续和的异或值.(n<=1e5 ai<=1e6) 想了各种奇怪的方法就是不会做啊啊啊.. Orz ...

  4. 洛谷P3760 - [TJOI2017]异或和

    Portal Description 给出一个\(n(n\leq10^5)\)的序列\(\{a_n\}(\Sigma a_i\leq10^6)\),求该数列所有连续和的异或和. Solution 线段 ...

  5. BZOJ 3261: 最大异或和

    Description 一个序列,支持两个操作. 1.在序列尾加入一个数. 2.询问 [l,r] 中与 x 异或值最大的数. \(n\leqslant 3*10^5\) Sol 可持久化 Trie 树 ...

  6. BZOJ 3261: 最大异或和( 可持久化trie )

    搞成前缀和然后就可以很方便地用可持久化trie维护了.时间复杂度O((N+M)*25) -------------------------------------------------------- ...

  7. [TJOI2017]异或和

    题目描述 在加里敦中学的小明最近爱上了数学竞赛,很多数学竞赛的题都是与序列的连续和相关的.所以对于一个序列,求出它们所有的连续和来说,小明觉得十分的 简单.但今天小明遇到了一个序列和的难题,这个题目不 ...

  8. bzoj 5301: [Cqoi2018]异或序列 (莫队算法)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5301 题面; 5301: [Cqoi2018]异或序列 Time Limit: 10 Sec ...

  9. BZOJ 3261 最大异或和(算竞进阶习题)

    可持久化Trie 需要知道一个异或的特点,和前缀和差不多 a[p] xor a[p+1] xor....xor a[n] xor x = a[p-1] xor a[n] xor x 所以我们把a[1. ...

随机推荐

  1. Core Data 基本数据操作 增删改查 排序

    所有操作都基于Core Data框架相关 API,工程需要添加CoreData.framework支持 1.增  NSEntityDescription insertNewObjectForEntit ...

  2. Python format语法

    a = {"name" : "alex","age":16} v = "my name is {name}, my age is ...

  3. LoadRunner监控Linux系统

    需要下载3个包:  地址链接:链接:https://pan.baidu.com/s/1lltAa6JnjJ7Mr88duixUSQ 密码:5yiw(1)rsh-0.17-14.i386.rpm (2) ...

  4. 非阻塞IO与异步IO

    一.非阻塞IO的轮询读写 ---如果当前进程有多个输入终端和多个输出终端呢?while((n=read(STDIN_FILENO,buf,buf_size))>0){    if(write(S ...

  5. RAID与磁盘管理之——综合应用

    为了实现磁盘的管理和RAID的综合,现将四块硬盘组合成一个RAID10,并在此基础之上创建物理卷.卷组.逻辑卷,实现在线扩容,最后挂载使用. 其中也部分包含了swap分区的创建和使用. 1.根据lin ...

  6. docker学习笔记-03:docker的镜像原理

    镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件.它包含运行某个环境所需的所有内容,包括代码.库.环境变量和配置文件. 一.镜像是什么 (一).联合文件系统(Unio ...

  7. 习题两则的简化(利用for循环)

    习题一.打印26个英文字母 public class PrintChars { public static void main(String[] args) { char ch = 'a'; int ...

  8. Gym - 101190F Foreign Postcards (期望dp)

    题意:有n张标有“C”或“F”的卡片. 1.随机取前k张(1<=k<=n) 2.若这k张的第一张为“C”,则不翻转,否则,全部翻转这k张. 3.然后处理剩下的n-k张 4.重复步骤1~3直 ...

  9. POJ1088:滑雪

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 82112   Accepted: 30706 Description ...

  10. Sublime和Python中文编码的一些问题

    Windows下的控制台中,应该是这样的逻辑: 1.如果是Unicode字符串的话,首先根据控制台编码进行转换 2.之后进行输出 所以在Windows控制台下,假设str = u'中文', 1.直接p ...