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还是权值线段树了。

代码:

  1. #include<bits/stdc++.h>
  2. #define N 300005
  3. #define lc (p<<1)
  4. #define rc (p<<1|1)
  5. #define mid (T[p].l+T[p].r>>1)
  6. #define inf ((1<<19)-1)
  7. using namespace std;
  8. inline int read(){
  9. int ans=0;
  10. char ch=getchar();
  11. while(!isdigit(ch))ch=getchar();
  12. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  13. return ans;
  14. }
  15. inline void write(int x){
  16. if(x>9)write(x/10);
  17. putchar(x%10^48);
  18. }
  19. int n,m,s[20];
  20. struct Node{int l,r,cnt;}T[N<<2];
  21. inline void pushup(int p){T[p].cnt=T[lc].cnt+T[rc].cnt;}
  22. inline void build(int p,int l,int r){
  23. T[p].l=l,T[p].r=r;
  24. if(l==r){T[p].cnt=0;return;}
  25. build(lc,l,mid),build(rc,mid+1,r);
  26. }
  27. inline void update(int p,int k){
  28. if(T[p].l==T[p].r){T[p].cnt=1;return;}
  29. update(p<<1|(k>mid),k),pushup(p);
  30. }
  31. inline int query(int p,int dep){
  32. if(T[p].l==T[p].r)return 0;
  33. int tmp=p<<1|s[dep];
  34. if(T[tmp].cnt==T[tmp].r-T[tmp].l+1)return query(tmp^1,dep-1)+(1<<dep);
  35. return query(tmp,dep-1);
  36. }
  37. int main(){
  38. n=read(),m=read();
  39. build(1,0,inf);
  40. while(n--)update(1,read());
  41. while(m--){
  42. int x=read();
  43. for(int j=1;j<=19;++j)if(x&(1<<j))s[j]^=1;
  44. write(query(1,18)),putchar('\n');
  45. }
  46. return 0;
  47. }

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. c++builder 代码模板 code templates

    c++builder6.0  MENU:Tools>Editor Options>Code Insight>Code templates XE6 c++builder D:\Prog ...

  2. VB6 如何创建一个标准控制台程序

    打开 VB6 并新建一个标准EXE程序,把窗口删掉,然后再加入一个模块. 在模块中加入AllocConsole.FreeConsole.SetConsoleTitle.Sleep的API声明: Pub ...

  3. sftp(paramiko)

    SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的.但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用S ...

  4. JS、CSS以及img对DOMContentLoaded事件的影响

    最近在做性能有关的数据上报,发现了两个非常有意思的东西:Chrome开发者工具的Timeline分析面板,以及DOMContentLoaded事件.一个是强大的令人发指的性能分析工具,一个是重要的性能 ...

  5. javascript时间日期操作

    Js获取当前日期时间及其它操作 var myDate = new Date();myDate.getYear();        //获取当前年份(2位)myDate.getFullYear();   ...

  6. java是如何编码解码的

    在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...

  7. form表单中的encType属性

    enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码,它有三个值 1.application/x-www-form-urlencoded:表单数据被编码为名称/值对.这是默认的编码方式 ...

  8. MIUI添加内存调试工具:查看进程中的Bitmap信息

    Android开发中的内存管理一直是令人头痛的事情.其中占用内存最大的一般是Bitmap.   在上周五发布的MIUI开发版中,我添加了查看内存里Bitmap信息的功能.大家开发app的时候可以使用这 ...

  9. js中常用的事件

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. css3 fileter始终效果 图片渲染

    http://www.w3cplus.com/css3/ten-effects-with-css3-filter