题目简化与分析:

题目翻译说的还是太复杂了,其实只是给你 $ n $ 个数,奇数位 \(\operatorname{or}\),偶数位 \(\operatorname{xor}\)。

  • 会修改某个元素
  • 查询修改后运算值

那我们很快就能想到线段树

毕竟这是个板子。

与普通的板子不一样的就是,加和变成了异或

普通板子跳转

Solution:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef double db;
  5. const int N=2e5+50;
  6. const int M=1e5+50;
  7. const int Mod=1e9+7;
  8. inline ll read(){
  9. ll x=0,f=1;
  10. char ch=getchar();
  11. while(ch<'0'||ch>'9'){
  12. if(ch=='-')
  13. f=-1;
  14. ch=getchar();
  15. }
  16. while(ch>='0'&&ch<='9'){
  17. x=(x<<1)+(x<<3)+(ch^48);
  18. ch=getchar();
  19. }
  20. return x*f;
  21. }
  22. ll n,m;
  23. ll a[N<<2],deep[N<<2];
  24. ll ans[N<<2];
  25. ll ls(int x){return x<<1;}
  26. ll rs(int x){return x<<1|1;}
  27. void push_up(int p){
  28. if(deep[p]&1){
  29. ans[p]=ans[ls(p)]|ans[rs(p)];
  30. }else{
  31. ans[p]=ans[ls(p)]^ans[rs(p)];
  32. }
  33. }
  34. void build(ll p,ll l,ll r){
  35. if(l==r){ans[p]=a[l];return;}
  36. ll mid=(l+r)>>1;
  37. build(ls(p),l,mid);
  38. build(rs(p),mid+1,r);
  39. deep[p]=deep[ls(p)]+1;
  40. push_up(p);
  41. }
  42. void update(ll nx,ll ny,ll l,ll r,ll p,ll k){
  43. if(nx<=l&r<=ny){
  44. ans[p]=k;
  45. return;
  46. }
  47. ll mid=(l+r)>>1;
  48. if(nx<=mid) update(nx,ny,l,mid,ls(p),k);
  49. if(ny>mid) update(nx,ny,mid+1,r,rs(p),k);
  50. push_up(p);
  51. }
  52. int main()
  53. {
  54. n=read(),m=read();
  55. n=(1<<n);
  56. for(int i=1;i<=n;++i) a[i]=read();
  57. build(1,1,n);
  58. for(int i=1;i<=m;++i){
  59. ll x,y;
  60. x=read(),y=read();
  61. update(x,x,1,n,1,y);
  62. printf("%lld\n",ans[1]);
  63. }
  64. return 0;
  65. }

CF339D的更多相关文章

  1. cf339d Xenia and Bit Operations

    Xenia and Bit Operations Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

随机推荐

  1. mybatis 部分符号需转译 及 IF如何正确判断单个数字字符

    mybatis 部分符号需转译 及 IF如何正确判断单个数字字符 1.Mybatis 转译字符如下下法即可: oracle中的日期查询在mybatis中写法可以参考如下:注意提交时间的<号是用特 ...

  2. 华为云GaussDB亮相2023可信数据库发展大会,荣获三项评测证书!

    摘要:2023可信数据库发展大会上,华为云数据库服务产品部总经理苏光牛围绕华为云GaussDB的产品能力和实践进行了分享 本文分享自华为云社区<华为云GaussDB亮相2023可信数据库发展大会 ...

  3. 手把手教你自定义自己SpringBoot Starter组件源码剖析

    我们知道SpringBoot Starter也就是启动器.是SpringBoot组件化的一大优点.基于这个思想,基于这个思想SpringBoot 才变得非常强大,官方给我们提供很多开箱即用的启动器. ...

  4. uniapp学习(二)

    easycom自动导入自定义组件 目录下 components / MyItem /MyItem.vue <template> <view> <view class=&q ...

  5. Blazor前后端框架Known-V1.2.3

    V1.2.3 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. Gitee: https://gitee.com/known/Known Gith ...

  6. LaTeX 的学习笔记

    摘自我的洛谷博客 该文章被打开的次数(包括洛谷平台): \(\LaTeX\) 中所有命令都以\开头,后面可以跟一个花括号,代表参数. \documentclass{} 指定了文章类型,有 articl ...

  7. Hi3798MV200 恩兔N2 NS-1 (三): 制作 Ubuntu rootfs

    目录 Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明 Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改 Hi3798MV200 恩兔N2 NS ...

  8. quarkus依赖注入之十:学习和改变bean懒加载规则

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<quarkus依赖注入> ...

  9. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-12-playwright操作iframe-中篇

    1.简介 按照计划今天就要用实际的例子进行iframe自动化测试.经过宏哥长时间的查找,终于找到了一个含有iframe的网页(QQ邮箱和163邮箱),别的邮箱宏哥就没有细看了.所以今天这一篇的主要内容 ...

  10. 0×03 Vulnhub 靶机渗透总结之 KIOPTRIX: LEVEL 1.2 (#3) SQL注入+sudo提权

    0×03 Vulnhub 靶机渗透总结之 KIOPTRIX: LEVEL 1.2 (#3) 系列专栏:Vulnhub靶机渗透系列 欢迎大佬:点赞️收藏关注 首发时间: 2023年8月22日 如有错误 ...