hyc的xor/mex

描述

NOIP2017就要来了,备战太累,不如做做hyc的新题?

找回自信吧!

一句话题意:n个数,m个操作

操作具体来讲分两步

1.读入x,把n个数全部xor上x

2.询问当前n个数的mex

意味着每次操作后你都需要输出一次

(注意:是mex,即集合内未出现过的最小非负整数

举2个例子 mex(4,33,0,1,1,5)=2 mex(1,2,3)=0)

输入

第一行两个整数n,m 意义同题面(1 ≤ n, m ≤ 3 * 10^5)

第二行 n个数 ai (0 ≤ ai ≤ 3 * 10^5)

接下来 m 行

每行一个整数 x

表示将所有数xor上x (0 ≤ x ≤ 3 * 10^5).

输出

一共m行

每行表示当前n个数的xor

样例输入

5 4

0 1 5 6 7

1

1

4

5

样例输出

2

2

0

2

提示

30%数据n,m<=1000

100%数据同“输入”

标签

mogician原创

假想有一个01trie,立刻想到对所有数进行异或操作就相当于对有1的二进制位层上的所有节点进行reverse操作,然而这个东西是可以用数组模拟的,于是就只差查询操作了,这个东西直接二进制位贪心查一查就行了。

于是我也分不清楚我写的是01trie还是权值线段树了。

代码:

#include<bits/stdc++.h>
#define N 300005
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
#define inf ((1<<19)-1)
using namespace std;
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;
}
inline void write(int x){
    if(x>9)write(x/10);
    putchar(x%10^48);
}
int n,m,s[20];
struct Node{int l,r,cnt;}T[N<<2];
inline void pushup(int p){T[p].cnt=T[lc].cnt+T[rc].cnt;}
inline void build(int p,int l,int r){
    T[p].l=l,T[p].r=r;
    if(l==r){T[p].cnt=0;return;}
    build(lc,l,mid),build(rc,mid+1,r);
}
inline void update(int p,int k){
    if(T[p].l==T[p].r){T[p].cnt=1;return;}
    update(p<<1|(k>mid),k),pushup(p);
}
inline int query(int p,int dep){
    if(T[p].l==T[p].r)return 0;
    int tmp=p<<1|s[dep];
    if(T[tmp].cnt==T[tmp].r-T[tmp].l+1)return query(tmp^1,dep-1)+(1<<dep);
    return query(tmp,dep-1);
}
int main(){
    n=read(),m=read();
    build(1,0,inf);
    while(n--)update(1,read());
    while(m--){
        int x=read();
        for(int j=1;j<=19;++j)if(x&(1<<j))s[j]^=1;
        write(query(1,18)),putchar('\n');
    }
    return 0;
}

2018.08.22 hyc的xor/mex(线段树/01trie)的更多相关文章

  1. 2018.08.22 NOIP模拟 or(线段树)

    or [描述] 构造一个长度为 n 的非负整数序列 x,满足 m 个条件,第 i 个条件为x[li] | x[li+1] | - | x[ri]=pi. [输入] 第一行两个整数 n,m.接下来 m ...

  2. 2018.08.17 bzoj4653: [Noi2016]区间(线段树+尺取法)

    传送门 将坐标离散化之后直接用尺取法(双指针)+线段树维护. 其实就是说只要目前所有点的被覆盖次数是大于等于m的就移动左指针删除区间更新答案,否则移动右指针加入区间更新答案. 话说忘记排序以及建树的时 ...

  3. 2018.08.15 bzoj3747: [POI2015]Kinoman(线段树)

    传送门 简单题. 先不管时间复杂度看看怎么做. 对于一段区间[l,r],如果从右端加入一个数a[r+1],对这个区间有什么影响?显然如果区间中已经有了a[r+1]这个数就会产生-a[i+1]的影响,否 ...

  4. 2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP)

    2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP) https://www.luogu.com.cn/problem/P1848 题意: 当农夫约翰闲 ...

  5. 2018.07.08 hdu1394 Minimum Inversion Number(线段树)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...

  6. HDU-4747 Mex 线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4747 题意:求一个数列中,所有mex(L,R)的和. 注意到mex是单调不降的,那么首先预处理出mex ...

  7. [置顶] hdu4747 Mex 线段树

    题意:给你一个序列,让你求出对于所有区间<i, j>的mex和,mex表示该区间没有出现过的最小的整数. 思路:从时限和点数就可以看出是线段树,并且我们可以枚举左端点i, 然后求出所有左端 ...

  8. BZOJ.3585.mex(线段树)

    题目链接 题意:多次求区间\(mex\). 考虑\([1,i]\)的\(mex[i]\),显然是单调的 而对于\([l,r]\)与\([l+1,r]\),如果\(nxt[a[l]]>r\),那么 ...

  9. hdu 4747 mex 线段树+思维

    http://acm.hdu.edu.cn/showproblem.php?pid=4747 题意: 我们定义mex(l,r)表示一个序列a[l]....a[r]中没有出现过得最小的非负整数, 然后我 ...

随机推荐

  1. apache中 MaxClients 与MaxRequestsPerChild

    据现象来对APACHE调优,以前用MAXCLIENTS 3000,砖家建议后,改为1500,今天查资料如下: http://www.linuxqq.net/ MaxClients 要加到多少?连接数理 ...

  2. ADO 读写文本文件

    ' 创建配置文件            Open ThisWorkbook.Path & "\schema.ini" For Append As #1            ...

  3. python-最好大学排名

    # -*- coding: utf-8 -*-"""Created on Mon Apr 3 09:37:52 2017 @author: zuihaodaxuepaim ...

  4. html5中的SessionStorage 和localStorage

    html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage. sessionStorage用于本地存储一个会话(session)中的数据,这些数据只 ...

  5. 安装 neo4j 在 .../bin 目录下使用 ./neo4j 没反应 和 从csv 导入数据到neo4j

    可以使用 /bin/sh ./neo4j start 如果提示:./neo4j: 28: set: Illegal option -o pipefail 那么 ubuntu”set Illegal o ...

  6. JSP通过表格显示数据库的信息

    [step one] 1-1 建立数据库 在jsp中,我们使用的是mysql数据库,对于此数据的优缺点本篇不予以讲述,首先建立news数据库,其数据库中表的信息为: eg:< id :1 ; n ...

  7. LuoguP1226 【模板】快速幂||取余运算

    题目链接:https://www.luogu.org/problemnew/show/P1226 第一次学快速幂,将别人对快速幂原理的解释简要概括一下: 计算a^b时,直接乘的话计算次数为b,而快速幂 ...

  8. 如何学习mybatis

    最近几天学习了mybatis框架,我是mybatis视频学习的.看这篇文章,我建议首先要会熟练使用MVC架构,再学习这个框架. 在我们写传统的MVC模式写Bean,Dao,Servlet时,我们每次调 ...

  9. ECMAScript6新特性之Reflect

    一 Reflect.ownKeys()获取对象属性. 可枚举的.不可枚举的.自有的.继承的. let fruit = { '2' : 'mango', [Symbol.for('pink')] : ' ...

  10. 两台Linux之间传文件

    安装sudo apt-get install openssh-client openssh-server 使用scp命令: scp john@~/hallo.h /usr/include 将左边移动到 ...