zoukankan      html  css  js  c++  java
  • T83312 【音乐会】达拉崩吧·上

    T83312 【音乐会】达拉崩吧·上

    题解

    线段树板子题

    把原来的 + 变成 ^ 

    但是注意一下懒标记,这里讲一下小技巧

    代码

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int maxn=1e5+10;
    int n,m,x,y,v,opr;
    int a[maxn],add[maxn*4];
    long long sum[maxn*4];
    long long ans;
    
    inline int read()
    {
        int ans=0;
        char last=' ',ch=getchar();
        while(ch<'0'||ch>'9') last=ch,ch=getchar();
        while(ch>='0'&&ch<='9') ans=ans*10+ch-'0',ch=getchar();
        if(last=='-') ans=-ans;
        return ans;
    }
    
    void build(int k,int l,int r)
    {
        if(l==r)
        {
            sum[k]=a[l];  return ;
        } 
        int mid=(l+r)>>1;
        build(k<<1,l,mid);
        build(k<<1|1,mid+1,r);
        sum[k]=sum[k<<1]^sum[k<<1|1];
    }
    
    void Add(int k,int l,int r,int p)
    {
        add[k]^=p;
        sum[k]^=(long long)((r-l+1)%2)*p;   //注意这里的小技巧
    }
    
    void pushdown(int k,int l,int r,int mid)
    {
        if(add[k]==0) return ;
        Add(k<<1,l,mid,add[k]);
        Add(k<<1|1,mid+1,r,add[k]);
        add[k]=0;
    }
    
    void modify(int k,int l,int r,int x,int y,int v)
    {
        if(x<=l&&r<=y) return Add(k,l,r,v);
        int mid=(l+r)>>1;
        pushdown(k,l,r,mid);
        if(x<=mid) modify(k<<1,l,mid,x,y,v);
        if(mid<y) modify(k<<1|1,mid+1,r,x,y,v);
        sum[k]=sum[k<<1]^sum[k<<1|1];
    }
    
    long long query(int k,int l,int r,int x,int y)
    {
        if(x<=l&&r<=y) return sum[k];
        int mid=(l+r)>>1;
        long long res=0;
        pushdown(k,l,r,mid);
        if(x<=mid) res^=query(k<<1,l,mid,x,y);
        if(mid<y) res^=query(k<<1|1,mid+1,r,x,y);
        return res;
    }
    
    int main()
    {
        n=read();m=read();
        for(int i=1;i<=n;i++)
          a[i]=read();
        
        build(1,1,n);
        
        for(int i=1;i<=m;i++)
        {
            opr=read();x=read();y=read();
            if(opr==1)
            {
                v=read();
                modify(1,1,n,x,y,v);
            }
            if(opr==2)
            {
                ans=query(1,1,n,x,y);
                printf("%ld
    ",ans);
            }
        }
        
        return 0;
    }

    强烈安利 water-lift  QWQ

  • 相关阅读:
    Kubernetes日志的6个最佳实践
    如何选出适合自己的管理Helm Chart的最佳方式?
    授权权限服务设计解析
    微服务中如何设计一个权限授权服务
    微服务中的网关
    ketchup服务治理
    ketchup 消息队列rabbitmq使用
    ketchup 注册中心consul使用
    微服务框架 ketchup 介绍
    微服务框架surging学习之路——序列化
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11106898.html
Copyright © 2011-2022 走看看