传送门

简单可持久化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. getitem, setitem, delitem (把类实例化成字典的类型)

    class Foo(object):     def __init__(self):         self.data = {} def __getitem__(self, key):        ...

  2. ABAP-动态编程

    转载:http://www.cnblogs.com/jiangzhengjun/p/4293407.html 动态编程 动态的基本语法 多种不同的动态编程 动态字段 动态类型 指定结构.内表组件字段的 ...

  3. 递归实现tree JQuery

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  4. Git revert merge

    从history1分出来的A, B两个branch A上有一些更改,例如 changeA2 changeA1 history1 B上有一些更改,例如 changeB2 changeB1 history ...

  5. React 简单介绍

    React 简单介绍 作者 RK_CODER 关注 2014.12.10 17:37* 字数 2516 阅读 55715评论 6喜欢 70 why React? React是Facebook开发的一款 ...

  6. mydumper使用

    一.下载安装,打开https://launchpad.net/mydumper #wget https://launchpadlibrarian.net/185032423/mydumper-0.6. ...

  7. php获取微信用户信息(没测试过)

    <?php /** * 通过$appid.$appsecret获得基础支持的接口唯一凭证access_token,返回值为array类型 */ function get_access_token ...

  8. ionic 2,带着运气成分

    npm config set loglevel info   查看安装信息 npm cache clean                  清除缓存 cnpm sync ionic         ...

  9. 大型运输行业实战_day04_3_高级查询+分页

    1.高级查询+分页最终结果 2.分页的本质分析 前端传入:当前页  和  每页显示条数 数据库必须查询出:数据列表 和 总共条数 页面显示包括的数据有: 列表 +  每页显示条数 + 当前页 + 总共 ...

  10. rabbitmq web管理界面 用户管理

    安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号guest登陆管理控制台,却提示登陆失败. 翻看官方的release文档后,得知由于账号gues ...