传送门

简单可持久化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. 怎样把代码复制到word中并保持颜色

  2. Mysql 唯一性约束添加

    来自:  http://blog.csdn.net/yumushui/article/details/38960619 一.单列唯一约束 在一列上添加唯一约束,主要是让该列在表中只能有唯一的一行,例如 ...

  3. fiddler 修改request请求

    例:在request url后追加&test=1参数 在OnBeforeRequest函数中添加以下代码 if(oSession.uriContains("www.bing.com/ ...

  4. python, Django csrf token的问题

    环境 Window 7 Python2.7 Django1.4.1 sqlite3 问题 在使用Django搭建好测试环境后,写了一个提交POST表单提交留言的测试页面. 如图: 填写表单,点击“提交 ...

  5. JAVA中request.getParameterMap()用法笔记

    一. 根据Java规范:request.getParameterMap()返回的是一个Map类型的值,该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系.这个返回值有个特别 ...

  6. 跨越数据库操作时注意要加dbo

    跨越数据库操作时注意要加dbo insert into hrdb.dbo.TB_B_PROJECTS  :这样是正确的 insert into hrdb.TB_B_PROJECTS  :这样是错误的

  7. jquery 获取和设置Select选项常用方法总结

    1.获取select 选中的 text:$("#cusChildTypeId").find("option:selected").text();$(" ...

  8. nodejs文件操作笔记

    nodejs添加了流的概念,通过流操作文件如行云流水,比早前便利畅快多了. 先来第一个例子,我们建一个stream.js文件,里面内容如下: var fs = require("fs&quo ...

  9. bash: ifconfig: command not found 问题解决

    ifconfig使用出现问题了?竟然提示找不到~~于是百度~~ [flymouse@localhost /]$ ifconfig 提示:“bash: ifconfig: command not fou ...

  10. 数据预处理之独热编码(One-Hot Encoding)(转载)

    问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from ...