zoukankan      html  css  js  c++  java
  • [BZOJ4888][TJOI2017]异或和(树状数组)

    题目描述

    在加里敦中学的小明最近爱上了数学竞赛,很多数学竞赛的题都是与序列的连续和相关的。所以对于一个序列,求出它们所有的连续和来说,小明觉得十分的简单。但今天小明遇到了一个序列和的难题,这个题目不仅要求你快速的求出所有的连续和,还要快速的求出这些连续和的异或值。小明很快的就求出了所有的连续和,但是小明要考考你,在不告诉连续和的情况下,让你快速求是序列所有连续和的异或值。

    输入输出格式

    输入格式:

    第一行输入一个n,表示这序列的数序列 第二行输入n个数字a1,a2...an代表这个序列

    0<=a1,a2,...an,0<=a1+a2...+an<=10^6

    输出格式:

    输出这个序列所有的连续和的异或值

    输入输出样例

    输入样例#1: 复制
    3
    1 2 3
    输出样例#1: 复制
    0

    说明

    【样例解释】

    序列1 2 3有6个连续和,它们分别是1 2 3 3 5 6,则1 xor 2 xor 3 xor 3 xor 5 xor 6 = 0

    【数据范围】

    对于20%的数据,1<=n<=100

    对于100%的数据,1<=n <= 10^5

    区间和转换成前缀和之差,树状数组分情况讨论即可。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #define rep(i,l,r) for (int i=l; i<=r; i++)
     5 using namespace std;
     6 
     7 const int N=100100,M=1000000;
     8 int flag,cnt,c[M+5][2],s[N],a[N],ans;
     9 int pw[21],n;
    10 
    11 void add(int x,int y){ while (x<=M) c[x][y]++,x+=(x&(-x)); }
    12 int query(int x,int y){
    13    int sum=0; while (x) sum+=c[x][y],x-=(x&(-x));
    14    return sum;
    15 }
    16 
    17 int main(){
    18    scanf("%d",&n);
    19    rep(i,1,n) scanf("%d",&s[i]),s[i]+=s[i-1];
    20    pw[0]=1; rep(i,1,20) pw[i]=pw[i-1]*2;
    21    rep(i,0,20)
    22       if (pw[i]<=s[n]){
    23          memset(c,0,sizeof(c));
    24          flag=0; add(1,0);
    25          rep(j,1,n){
    26             int tmp=s[j]&pw[i];
    27             if (tmp) cnt=query(a[j]+1,0)+query(1000001,1)-query(a[j]+1,1);
    28             else cnt=query(a[j]+1,1)+query(1000001,0)-query(a[j]+1,0);
    29             if (cnt%2==1) flag^=1;
    30             add(a[j]+1,(bool)tmp);
    31             if (tmp) a[j]|=pw[i];
    32          }
    33          if (flag) ans|=(pw[i]);
    34       }
    35    printf("%d
    ",ans);
    36    return 0;
    37 }
  • 相关阅读:
    ASP.NET MVC框架(第四部分): 处理表单编辑和提交场景 【转】
    ASP.NET MVC框架 (第二部分): URL路径选择 【转】
    ASP.NET MVC框架(第三部分): 把ViewData从控制器传到视图 【转】
    SNS介绍
    测试代码在实际类的内部写还是外部写的思考
    敏捷开发:软件与文档
    TDD是开发方法还是开发方法学?
    命名空间元素的封装性
    个人感觉
    呜呜....可惜...呜呜,也谈谈测试驱动开发
  • 原文地址:https://www.cnblogs.com/HocRiser/p/8457651.html
Copyright © 2011-2022 走看看