• CF339D Xenia and Bit Operations线段树


    把区间和改成,第一层|,第二层 ^。

    每次给出一个x,y

    把 第x个变成y  ,输出 sum[1];

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <climits>
    #include <string>
    #include <iostream>
    #include <map>
    #include <cstdlib>
    #include <list>
    #include <set>
    #include <queue>
    #include <stack>
    #include<math.h>
    using namespace std;
    
    #define lson l,mid,rt<<1,len+1
    #define rson mid+1,r,rt<<1|1,len+1
    int n;
    int sum[1<<18];
    void build(int l,int r,int rt,int len)
    {
        if(l==r){
            scanf("%d",&sum[rt]);
            return ;
        }
        int mid=(l+r)>>1;
        build(lson);build(rson);
        if((n-len)&1) sum[rt]=sum[rt<<1]^sum[rt<<1|1];
        else sum[rt]=sum[rt<<1]|sum[rt<<1|1];
      //  printf("%d %d %d %d",len&1,rt,sum[rt<<1],sum[rt<<1|1]);system("pause");
    }
    
    void update(int pos,int add,int l,int r,int rt,int len)
    {
        if(l==r){
            sum[rt]=add;
            return ;
        }
        int mid=(l+r)>>1;
        if(pos<=mid) update(pos,add,lson);
        else update(pos,add,rson);
        if((n-len)&1) sum[rt]=sum[rt<<1]^sum[rt<<1|1];
        else sum[rt]=sum[rt<<1]|sum[rt<<1|1];
    }
    int main()
    {
        int t;
        int a;int b;
        scanf("%d",&n); scanf("%d",&t);
        int  m = 1<<n;
     //   cout<<m<<" "<<n<<endl;system("pause");
        build(1,m,1,1);
       // cout<<sum[1]<<endl;
       // system("pause");
        for(int i = 0 ;i< t;i++){
            scanf("%d%d",&a,&b);
            update(a,b,1,m,1,1);
            printf("%d
    ",sum[1]);
        }
        return 0;
    }
  • 相关阅读:
    汇编(一)续
    汇编(一)
    Ubuntu 安装配置Dosbox
    Linux系统安装Dos系统(虚拟机里装)
    .bundle文件如何安装
    Linux(Fedora)系统下配制8086汇编环境
    Linux常用命令
    linux下安装nginx
    缓存雪崩、缓存穿透、缓存击穿是什么?如何解决?
    Maven 实战
  • 原文地址:https://www.cnblogs.com/yigexigua/p/3907289.html
Copyright © 2020-2023  润新知