传送门

简单可持久化01trie树。

实际上这东西跟可持久化线段树貌似是一个东西啊。

要维护题目给出的信息,就需要维护前缀异或和并且把它们插入一棵01trie树,然后利用贪心的思想在上面递归就行了,因为01trie树的深度是log(max(a[i]))" role="presentation" style="position: relative;">log(max(a[i]))log(max(a[i]))的,因此单次查询的效率就是log(max(a[i]))" role="presentation" style="position: relative;">log(max(a[i]))log(max(a[i]))的,因此总时间复杂度是O(mlog(max(a[i])))" role="presentation" style="position: relative;">O(mlog(max(a[i])))O(mlog(max(a[i])))的。

代码:

#include<bits/stdc++.h>
#define N 300005
using namespace std;
int sum[600005],rt[300005*100],n,m,tot=0,cnt=0;
struct Node{int l,r,cnt;}T[300005*100];
inline int read(){
    int ans=0;
    char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
    return ans;
}
int ans=0;
inline void update(int&p,int las,int v,int dep){
    T[p=++tot]=T[las],++T[p].cnt;
    if(dep==-1)return;
    int op=(v>>dep)&1;
    if(!op)update(T[p].l,T[las].l,v,dep-1);
    else update(T[p].r,T[las].r,v,dep-1);
}
inline void query(int ql,int qr,int v,int dep){
    if(dep==-1)return;
    int op=(v>>dep)&1;
    op^=1;
    if(!op){
        if(T[T[qr].l].cnt-T[T[ql].l].cnt)ans+=(1<<dep),query(T[ql].l,T[qr].l,v,dep-1);
        else query(T[ql].r,T[qr].r,v,dep-1);
    }
    else{
        if(T[T[qr].r].cnt-T[T[ql].r].cnt)ans+=(1<<dep),query(T[ql].r,T[qr].r,v,dep-1);
        else query(T[ql].l,T[qr].l,v,dep-1);
    }
}
int main(){
    n=read()+1,m=read(),rt[0]=0,T[0].l=T[0].r=T[0].cnt=0;
    for(int i=2;i<=n;++i)sum[i]=sum[i-1]^read();
    for(int i=1;i<=n;++i)update(rt[i],rt[i-1],sum[i],25);
    while(m--){
        char s[5];
        scanf("%s",s);
        if(s[0]=='A')++n,sum[n]=sum[n-1]^read(),update(rt[n],rt[n-1],sum[n],25);
        else{
            int l=read(),r=read(),x=read()^sum[n];
            ans=0;
            query(rt[l-1],rt[r],x,25);
            cout<<ans<<'\n';
        }
    }
    return 0;
}

2018.08.04 bzoj3261: 最大异或和(trie)的更多相关文章

  1. 新手C#string类常用函数的学习2018.08.04

    ToLower()用于将字符串变为小写,注意字符串的不可变特性,需要重新赋值给另一个字符串变量. s = s.ToLower();//字符串具有不可变性,转换后需要重新赋值,不可仅有s.ToLower ...

  2. 新手C#int.Parse、int.TryParse的学习2018.08.04

    int.Parse()用于将字符串转换为32为int类型,但是在遇到非数字或者类似1.545这种小数的时候会报错,后来采用了int.TryParse,这个在转换后会判断是否可以正常转换,若不能,会返回 ...

  3. 新手C#参数类型ref、out、params的学习2018.08.04

    ref用于传递参数时,将实参传递到函数中,是引用参数,在使用前必须被赋值.string类型也同样适用. static void Main(string[] args) { string a1,a2; ...

  4. 新手C#重载、重写的学习2018.08.04

    重载:在同一类(class)中,使用相同的方法名称,不同的参数和(不一定)不同的返回值类型构造成的方法. 举例: class OverLoadTest { public void Hello() { ...

  5. 2018.08.12 bzoj5301: [Cqoi2018]异或序列(前缀和+莫队)

    传送门 简单的异或前缀和处理+莫队统计答案. 惊奇的发现无论开不开long long都能跑过... 代码: #include<bits/stdc++.h> #define N 100005 ...

  6. 2018.08.04 洛谷P3380 【模板】二逼平衡树(树套树)

    传送门 技不如人,写的权值线段树套线段树在bzoj上无论如何都卡不过空间. 这是一道树套树简单题,感觉没什么好说的. 直接权值线段树套平衡树就行了. 代码: #include<bits/stdc ...

  7. 2018.08.04 cogs2633. [HZOI 2016]数列操作e(线段树)

    传送门 支持区间加w(i−ql+1)2" role="presentation" style="position: relative;">w(i ...

  8. 2018.08.04 spoj TTM to the moon(主席树)

    spoj传送门 vjudge传送门 主席树板子题. 支持历史版本的区间和,区间和,区间修改和时光倒流. 其中新奇一点的也只有区间修改了,这个东西直接标记永久化就行了. 如果想下传标记的话也行,需要在p ...

  9. 北京设计模式学习组bjdp.org第7次活动(2013.08.04)回顾会纪要

    时间:2013.08.04,9am-7pm 地点:北京龙泉寺(北京凤凰岭风景区内) 参加人数:北京龙泉寺信息中心(20人).北京设计模式学习组(9人) 活动要点: 1)寺院巡礼:义工师兄带领参观寺院. ...

随机推荐

  1. bootstrap做的导航

    顶部导航:nav-tabs 左边导航:nav-list 响应式布局:div嵌套 ~ container.row.ol-lg-X 效果: 源码: <!DOCTYPE html> <ht ...

  2. django-allauth 使用

    参考: http://www.honkerzhou.com/post/3/ https://www.jianshu.com/p/41335d861a8d https://django-allauth. ...

  3. is not on any development teams

    is not on any development teams 1)账号正在申请中 2)申请成功后的账号? 加了3个账号,都是这样子的. 1:Xcode>Window> "Org ...

  4. JS 报表制作

    1:Echarts, 界面多样化. http://echarts.baidu.com/index.html 2: Jmgraph 工具 简单的画线工具 http://graph.jm47.com/ 3 ...

  5. MySQL JSON 类型数据操作

    1.Java 中动态扩展字段,会导致数据库表被锁,在MySQL 5.7.8版本之前,因为MySQL不能直接操作JSON类型数据,可以将一个字段设定成varchar类型,里面存放JSON格式数据,这样在 ...

  6. LESS CSS 实例

    值得参考的 10 个 LESS CSS 实例   2 收藏(185) LESS, Sass 和其他 CSS 预处理器是一种超棒的方法用来扩展 CSS 功能,使之更适合程序员.你可以使用变量.函数.混合 ...

  7. Haskell语言学习笔记(63)Dicidable

    Dicidable class Divisible f => Decidable f where lose :: (a -> Void) -> f a choose :: (a -& ...

  8. 02 Tensorflow的安装配置

    1 anaconda 64 位,win10 安装 清华大学镜像网络,下载地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 选择下载文件 ...

  9. SQL Server:查看数据库用户权限(SQL 2005)

    1. 查看 SQL 2005 用户所属数据库角色 use yourdb go select DbRole = g.name, MemberName = u.name, MemberSID = u.si ...

  10. 疯狂JAVA——第七章 java基础类库

    System类代表当前java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过System类来调用这些类变量和类方法.