题解:

比较水吧

显然是平衡树的操作

然后就是写写写

用对拍来查错相比之下直接样例查还是比较容易的

刚开始没有优化常数没开O2就变成暴力分了smg 开了O2就a了

代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define rint register int
  4. #define IL inline
  5. #define rep(i,h,t) for (rint i=h;i<=t;i++)
  6. #define dep(i,t,h) for (rint i=t;i>=h;i--)
  7. #define ll long long
  8. const int N=3e5;
  9. int a[N],rt,x1,x2;
  10. char ss[<<],*A=ss,*B=ss;
  11. IL char gc()
  12. {
  13. return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;
  14. }
  15. template<class T>void read(T &x)
  16. {
  17. rint f=,c; while (c=gc(),c<||c>) if (c=='-') f=-; x=(c^);
  18. while (c=gc(),c>&&c<) x=(x<<)+(x<<)+(c^); x*=f;
  19. }
  20. struct sgt{
  21. int v[N][],data[N],lazy[N],ls[N],rs[N],count2[N],fa[N];
  22. bool rev[N];
  23. IL void updata(rint x)
  24. {
  25. count2[x]=count2[ls[x]]+count2[rs[x]]+;
  26. rint *a=v[x],*b=v[ls[x]],*c=v[rs[x]],d=data[x];
  27. rep(i,,) a[i]=((d>>i)&)+b[i]+c[i];
  28. // rep(i,0,20) v[x][i]=((data[x]>>i)&1)+v[ls[x]][i]+v[rs[x]][i];
  29. }
  30. IL void down(rint x)
  31. {
  32. if (rev[x])
  33. {
  34. rev[ls[x]]^=; rev[rs[x]]^=;
  35. swap(ls[x],rs[x]);
  36. rev[x]=;
  37. }
  38. if (lazy[x])
  39. {
  40. if (ls[x])
  41. {
  42. lazy[ls[x]]^=lazy[x]; data[ls[x]]^=lazy[x];
  43. dep(i,,)
  44. if ((lazy[x]>>i)&) v[ls[x]][i]=count2[ls[x]]-v[ls[x]][i];
  45. }
  46. if (rs[x])
  47. {
  48. lazy[rs[x]]^=lazy[x]; data[rs[x]]^=lazy[x];
  49. dep(i,,)
  50. if ((lazy[x]>>i)&) v[rs[x]][i]=count2[rs[x]]-v[rs[x]][i];
  51. }
  52. lazy[x]=;
  53. }
  54. }
  55. void rotate(rint x,rint y)
  56. {
  57. rint f1=fa[x];
  58. if (y==)
  59. {
  60. rs[f1]=ls[x];
  61. if (ls[x]) fa[ls[x]]=f1;
  62. } else
  63. {
  64. ls[f1]=rs[x];
  65. if (rs[x]) fa[rs[x]]=f1;
  66. }
  67. fa[x]=fa[f1];
  68. if (fa[f1])
  69. if (ls[fa[f1]]==f1) ls[fa[f1]]=x;
  70. else rs[fa[f1]]=x;
  71. fa[f1]=x;
  72. if (y==) ls[x]=f1; else rs[x]=f1;
  73. updata(f1); updata(x);
  74. }
  75. void dfs(int x)
  76. {
  77. if (fa[x]) dfs(fa[x]);
  78. down(x);
  79. }
  80. void splay(rint x,rint y)
  81. {
  82. dfs(x);
  83. rint f1=fa[x];
  84. while (f1!=y)
  85. {
  86. if (fa[f1]==y)
  87. if (ls[f1]==x) rotate(x,); else rotate(x,);
  88. else
  89. if (ls[fa[f1]]==f1)
  90. if (ls[f1]==x) rotate(f1,),rotate(x,);
  91. else rotate(x,),rotate(x,);
  92. else if (rs[f1]==x) rotate(f1,),rotate(x,);
  93. else rotate(x,),rotate(x,);
  94. f1=fa[x];
  95. }
  96. if (!y) rt=x;
  97. }
  98. IL int search(rint x)
  99. {
  100. rint y=rt;
  101. while (y)
  102. {
  103. down(y);
  104. if (count2[ls[y]]+==x) return(y);
  105. if (count2[ls[y]]>=x) y=ls[y];
  106. else x-=count2[ls[y]]+,y=rs[y];
  107. }
  108. }
  109. IL void split(rint x,rint y)
  110. {
  111. x1=search(x);
  112. x2=search(y);
  113. splay(x2,);
  114. splay(x1,x2);
  115. down(x2); down(x1); x1=rs[x1];
  116. }
  117. }S;
  118. int main()
  119. {
  120. freopen("1.in","r",stdin);
  121. freopen("1.out","w",stdout);
  122. int n,m;
  123. read(n); read(m);
  124. rep(i,,n) read(a[i]);
  125. rep(i,,n+)
  126. {
  127. S.rs[i]=i+,S.count2[i]=,S.fa[i+]=i,S.data[i]=a[i-];
  128. }
  129. S.splay(n+,);
  130. rep(i,,m)
  131. {
  132. int kk,x,y,z;
  133. read(kk); read(x); read(y);
  134. if (kk==)
  135. {
  136. S.split(x,y+);
  137. S.rev[x1]^=;
  138. S.splay(x1,);
  139. }
  140. if (kk==)
  141. {
  142. read(z);
  143. S.split(x,y+);
  144. S.lazy[x1]^=z;
  145. S.data[x1]^=z;
  146. rep(i,,) if ((z>>i)&) S.v[x1][i]=S.count2[x1]-S.v[x1][i];
  147. S.splay(x1,);
  148. }
  149. if (kk==)
  150. {
  151. S.split(x,y+);
  152. ll ans=;
  153. dep(i,,) ans+=1ll*(<<i)*S.v[x1][i];
  154. cout<<ans<<endl;
  155. }
  156. }
  157. return ;
  158. }

mzf的考验的更多相关文章

  1. 洛谷 P4883 mzf的考验 解题报告

    P4883 mzf的考验 题目背景 \(mzf\)立志要成为一个豪杰,当然,他也是一个\(OIer\). 他希望自己除了会\(OI\)之外还会各种东西,比如心理学.吉他.把妹等等. 为了让自己有更大的 ...

  2. 【洛谷】P4883 mzf的考验

    [洛谷]P4883 mzf的考验 最近忽然放弃治疗开始随机跳题了 感觉还行 就是必须吸氧感觉有点糟糕... 这题翻转和求和都是平衡树基本操作,那个异或可以通过维护树中\(2\)进制下第\(2^{i}\ ...

  3. P4883 mzf的考验[平衡树]

    P4883 mzf的考验 维护一种数据结构 支持区间翻转 区间异或 区间求和- 显然 fhq treap 区间异或显然是拆位 ~~然后复杂度*20~~ 第一次先遍历一下整棵树 pushup 一下 就可 ...

  4. 洛谷【P4883】mzf的考验

    浅谈\(splay\):https://www.cnblogs.com/AKMer/p/9979592.html 浅谈\(fhq\)_\(treap\):https://www.cnblogs.com ...

  5. luogu4883 mzf的考验

    题目描述: luogu 题解: 当然splay. 区间翻转是基本操作. 区间异或?按套路记录区间内每一位$1$的个数,异或的时候按位取反即可. 区间查询同理. 因为要按位维护,所以复杂度多了个log. ...

  6. USB Type-C 应用面临安全性考验,USB-IF 将推动新认证机制

    USB 应用已经达到空前盛况,横跨电脑.移动设备.周边设备.影音器材等范畴,是一个极为普遍常见的界面.进入 USB Type-C 世代由于一并推动 USB-PD,过去没有严格执行的认证要求,基于安全性 ...

  7. 如果不能显示真正的考验个别车型toast问题解决

    当真正的考验个别车型toast不显示信息,找到两个解决方式.不知还有什么其他有效方法.期待大神们的分享!.! 1.手动方案:设置-->应用软件管理-->相应APP-->勾选显示通知框 ...

  8. BZOJ:4333: JSOI2012 智者的考验

    4333: JSOI2012 智者的考验 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 68  Solved: 18[Submit][Status][ ...

  9. 每个努力奋斗过的人,被不公正的际遇砸了满头包的时候,都有那么一瞬间的代入感。出生就是hard模式的人,早已经历了太多的劳其筋骨饿其体肤,再多的人为考验只会摧毁人对美好的向往。

    每个努力奋斗过的人,被不公正的际遇砸了满头包的时候,都有那么一瞬间的代入感.出生就是hard模式的人,早已经历了太多的劳其筋骨饿其体肤,再多的人为考验只会摧毁人对美好的向往.

随机推荐

  1. Python os.removedirs() 和shutil.rmtree() 用于删除文件夹

    概述 os.removedirs() 方法用于递归删除目录.像rmdir(), 如果子文件夹成功删除, removedirs()才尝试它们的父文件夹,直到抛出一个error(它基本上被忽略,因为它一般 ...

  2. NOI2019 SX 模拟赛 no.5

    Mas 的童年 题目描述:不知道传送门有没有用? 反正就是对于每个前缀序列求一个断点,使得断点左右两个区间的 分别的异或和 的和最大 分析 jzoj 原题? 但是我 TM 代码没存账号也过期了啊! 然 ...

  3. ubuntu 16.04 登录后黑屏

    进入登录界面后黑屏,重新更新英伟达的显卡,也么有起作用. 解决办法,进入登录界面时,进入终端(ctrl+alt+f1),然后修改 grub配置文件,使其每次重启时都检查文件 sudo  vi /etc ...

  4. c++ 值转换

    1.double,float 四舍五入,保留小数位数. void MainWindow::on_pushButton_clicked() { double number=3.141592; ); qD ...

  5. 滑动时候警告:Unable to preventDefault inside passive event listener

    1 前言 在制作2048时,需要在手机端添加滑动检测事件,然后发现控制台有警告,如下: main2048.js:218 [Intervention] Unable to preventDefault ...

  6. 在内网使用Gradle构建Android Studio项目

    在Android Studio项目中,默认的远程仓库为jcenter,如果在项目引用了一些类库,Gradle构建程序的时候会将这些依赖类库从jcenter网站下载到本地,如我们在 build.grad ...

  7. MySQL笔记二

    Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...

  8. vue打包项目后使用-webkit-line-clamp: 2;这个属性不生效?

    在项目中要实现多行省略,-webkit-line-clamp: 2;打包后不生效,使用下面的方法: word-break: break-all; text-overflow: ellipsis; di ...

  9. mabytis的xml一些写法

    1.jdbcType=TIMESTAMP 而不是 jdbcType=DATETIME myabtis 3.4.6 版本jar包中:jdbcType枚举: ARRAY(Types.ARRAY), BIT ...

  10. Confluence 6 Microsoft SQL Server 设置准备

    在开始前,请检查: 请查看 Supported Platforms 页面来获得 Confluence 系统支持的 SQL Server 数据库版本.你需要在安装 Confluence 之前升级你的 O ...