传送门

题意:给出一个长度为$N$的非负整数序列,求其中所有连续区间的区间和的异或值。$N \leq 10^5$,所有元素之和$\leq 10^6$


设序列的前缀和为$s_i$,特殊地,$s_0=0$

因为最后答案是一个异或值,所以我们考虑按位计算答案,也就是计算所有区间和中某一位上的$1$的个数。

考虑区间$[j+1,i]$在第$t$位上是否产生贡献,假设$s_i$的第$0$到$t-1$位的数字为$x$,$s_j$的第$0$到$t-1$位的数字为$y$,分类讨论:

①如果$s_i$的第$t$位为$1$,则$s_j$要么$t$位为$0$且$y<x$,要么$t$位为$1$且$y>x$

②如果$s_i$第$t$位为$0$,情况与上面相反。

可以发现不论什么情况,会产生贡献的$s_j$在$0-t$位上的取值表现为一段区间。于是使用树状数组维护这一段区间,每一次计算$s_i$对应的答案,然后把$s_i \text{& (1 << t) - 1}$丢入树状数组即可。复杂度$O(nlognlog10^6)$

 #include<bits/stdc++.h>
 using namespace std;

 inline int read(){
     ;
     char c = getchar();
     while(!isdigit(c))
         c = getchar();
     while(isdigit(c)){
         a = (a << ) + (a << ) + (c ^ ');
         c = getchar();
     }
     return a;
 }

 const int MAXN = 1e5 , MAXM = 2e6;
 ];
 ] , N;

 inline int lowbit(int now){
     return now & -now;
 }

 inline void add(int now){
     now++;
     while(now < MAXM){
         treeNum[now]++;
         now += lowbit(now);
     }
 }

 inline int getSum(int now){
     now++;
     ;
     while(now){
         sum += treeNum[now];
         now -= lowbit(now);
     }
     return sum;
 }

 int main(){
     N = read();
     ;
      ; i <= N ; i++)
         num[i] = read() + num[i - ];
      ; i <  ; i++){
         memset(treeNum ,  , sizeof(treeNum));
         ;
          ; j <= N ; j++){
              << i))
                 cnt = (cnt + getSum(( << i + ) - ) - getSum(num[j] & ( << i + ) - ) + getSum(num[j] & ( << i) - )) & ;
             else
                 cnt = (cnt + getSum(((num[j] & ( << i) - ) |  << i)) - getSum(num[j] & ( << i) - )) & ;
             add(num[j] & ( << i + ) - );
         }
         ans += cnt * ( << i);
     }
     cout << ans;
     ;
 }

Luogu3760 TJOI2017 异或和 树状数组的更多相关文章

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

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

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

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

  3. 【Foreign】异色弧 [树状数组]

    异色弧 Time Limit: 20 Sec  Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample Input 8 1 ...

  4. P5057 [CQOI2006]简单题 前缀异或差分/树状数组

    好思路,好思路... 思路:前缀异或差分 提交:1次 题解:区间修改,单点查询,树状数组,如思路$qwq$ #include<cstdio> #include<iostream> ...

  5. 洛谷 P6225 [eJOI2019]异或橙子 (树状数组)

    题意:有\(n\)个数,起始值均为\(0\),进行\(q\)次操作,每次输入三个数,如果第一个数为\(1\),则将第\(i\)个数修改为\(j\),如果为\(2\),则求区间\([l,r]\)内的所有 ...

  6. [CSP-S模拟测试]:异或(树状数组+LCA)

    题目传送门(内部题21) 输入格式 第一行一个字符串$str$,表示数据类型.第二行一个正整数$k$,表示集合$K$的大小,保证$k>1$.接下来$k$行每行$k$个数,第$i$行第$j$个数表 ...

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

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

  8. BZOJ4888 [Tjoi2017]异或和 【树状数组】

    题目链接 BZOJ4888 题解 要求所有连续异或和,转化为任意两个前缀和相减 要求最后的异或和,转化为求每一位\(1\)的出现次数 所以我们只需要对每一个\(i\)快速求出\(sum[i] - su ...

  9. BZOJ4888 [Tjoi2017]异或和 FFT或树状数组+二进制拆位

    题面 戳这里 简要题解 做法一 因为所有数的和才100w,所以我们可以直接求出所有区间和. 直接把前缀和存到一个权值数组,再倒着存一遍,大力卷积一波. 这样做在bzoj目前还过不了,但是luogu开O ...

随机推荐

  1. 测试思想-集成测试 关于接口测试 Part 2

     关于接口测试 by:授客 QQ:1033553122 ------------------接Part 1---------------------- 5.   用例设计思想(举例说明) 如上表,是某 ...

  2. call/apply以及this指向的理解

    javascript是面向对象的语言,Function也是一种对象,有自己的属性和方法.call和apply就是js函数自带方法,挂在Fucntion.prototype上. 一般调用某函数时,直接“ ...

  3. loadrunner11中文版破解文档+录制脚本(图/文)

    下面是整理后的loadrunner11破解版的所有文件及操作步骤. LoadRunner11安装 1.Loadrunner11下载链接:https://pan.baidu.com/s/15Svt3kt ...

  4. weblogic系列漏洞整理 -- 3. weblogic 后台提权

    目录 三. weblogic 后台提权 0. 思路分析 1. 利用过程 2. 提示和技巧 一.weblogic安装 http://www.cnblogs.com/0x4D75/p/8916428.ht ...

  5. myeclipse编写servlet

    1.File--New--Other.搜索web--Dynamic Web Project--Next,Project name--Next,Next--web应用的根目录和web资源存放的目录--- ...

  6. webrtc 实时视频 .net websocket信令服务器

    这篇文章主要参考了 Webrtc WebSocket实现音视频通讯,非常感谢提供代码 前端部分完全是从这篇文章复制过来的,只是修改了webscket的url,还有加入了webrtc-adapterjs ...

  7. [JSON_01] JSON 解析

    0. 说明 介绍 && 测试 JSON 1. 介绍 XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. JSON: ...

  8. 【PAT】B1053 住房空置率(20 分)

    #include<cstdio> #include<string.h> #include<algorithm> using namespace std; int m ...

  9. javascript闭包—围观大神如何解释闭包

    闭包的概念已经出来很长时间了,网上资源一大把,本着拿来主意的方法来看看. 这一篇文章 学习Javascript闭包(Closure) 是大神阮一峰的博文,作者循序渐进,讲的很透彻.下面一一剖析. 1. ...

  10. 定义 java 基本数据类型

    package debug; class Demo { /* * 定义八种基本数据类型,如下 */ public static void main(String[] args) { //define ...