银川站网络预选赛重赛(手动滑稽)的时候,第一道题就是这样的一个题,虽然最后没有判出来。不一定对,可以借鉴一下吧。
代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define ll long long
using namespace std;const int maxx=1e5+100;
struct node{int l;int r;int val[25];int lazy1;int lazy2;int lazy3;
}p[maxx<<2];
int n,m;
ll ans;inline void pushup(int cur)
{for(int i=0;i<22;i++)p[cur].val[i]=p[cur<<1].val[i]+p[cur<<1|1].val[i];
}
inline void pushdown1(int cur)
{int L=p[cur].l;int R=p[cur].r;if(p[cur].lazy1){p[cur<<1].lazy1^=p[cur].lazy1;p[cur<<1|1].lazy1^=p[cur].lazy1;for(int i=0;i<22;i++){if((p[cur].lazy1>>i)&1){p[cur<<1].val[i]=R-L+1-((R-L+1)>>1)-p[cur<<1].val[i];p[cur<<1|1].val[i]=((R-L+1)>>1)-p[cur<<1|1].val[i];}}p[cur].lazy1=0;}
}
inline void pushdown2(int cur)
{int L=p[cur].l;int R=p[cur].r;if(p[cur].lazy2){p[cur<<1].lazy2|=p[cur].lazy2;p[cur<<1|1].lazy2|=p[cur].lazy2;for(int i=0;i<22;i++){if((p[cur].lazy2>>i)&1){p[cur<<1].val[i]=R-L+1-((R-L+1)>>1);p[cur<<1|1].val[i]=((R-L+1)>>1);}}p[cur].lazy2=0;}
}
inline void pushdown3(int cur)
{int L=p[cur].l;int R=p[cur].r;if(p[cur].lazy3){p[cur<<1].lazy3&=p[cur].lazy3;p[cur<<1|1].lazy3&=p[cur].lazy3;for(int i=0;i<22;i++){if(!((p[cur].lazy3>>i)&1)) {p[cur<<1].val[i]=0;p[cur<<1|1].val[i]=0;}}p[cur].lazy3=0;}
}
inline void build(int l,int r,int cur)
{p[cur].l=l;p[cur].r=r;memset(p[cur].val,0,sizeof(p[cur].val));p[cur].lazy1=0;p[cur].lazy2=0;p[cur].lazy3=0;if(l==r){int t;scanf("%d",&t);for (int i = 0; i < 22; i++){p[cur].val[i] = (t >> i) & 1;}return;}int mid=l+r>>1;build(l,mid,cur<<1);build(mid+1,r,cur<<1|1);pushup(cur);
}
inline void update1(int l,int r,int v,int cur)//^
{int L=p[cur].l;int R=p[cur].r;if(l<=L&&R<=r){p[cur].lazy1=p[cur].lazy1^v;for(int i=0;i<22;i++){if((v>>i)&1) p[cur].val[i]=R-L+1-p[cur].val[i];}return ;}pushdown1(cur);pushdown2(cur);pushdown3(cur);int mid=L+R>>1;if(l<=mid) update1(l,r,v,cur<<1);if(r>mid) update1(l,r,v,cur<<1|1);pushup(cur);
}
inline void update2(int l,int r,int v,int cur)//|
{int L=p[cur].l;int R=p[cur].r;if(l<=L&&R<=r){p[cur].lazy2|=v;for(int i=0;i<22;i++){if((v>>i)&1) p[cur].val[i]=R-L+1;}return ;}pushdown1(cur);pushdown2(cur);pushdown3(cur);int mid=L+R>>1;if(l<=mid) update2(l,r,v,cur<<1);if(r>mid) update2(l,r,v,cur<<1|1);pushup(cur);
}
inline void update3(int l,int r,int v,int cur)//&
{int L=p[cur].l;int R=p[cur].r;if(l<=L&&R<=r){p[cur].lazy3&=v;for(int i=0;i<22;i++){if(!((v>>i)&1)) p[cur].val[i]=0;}return ;}pushdown1(cur);pushdown2(cur);pushdown3(cur);int mid=L+R>>1;if(l<=mid) update3(l,r,v,cur<<1);if(r>mid) update3(l,r,v,cur<<1|1);pushup(cur);
}
inline void query(int l,int r,int cur)
{int L=p[cur].l;int R=p[cur].r;if(l<=L&&R<=r){for(int i=0;i<22;i++){ans+=((ll)p[cur].val[i]<<i);}return ;}pushdown1(cur);pushdown2(cur);pushdown3(cur);int mid=L+R>>1;if(l<=mid) query(l,r,cur<<1);if(r>mid) query(l,r,cur<<1|1);pushup(cur);
}
int main()
{int op,l,r,x;while(~scanf("%d",&n)){build(1,n,1);scanf("%d",&m);while(m--){scanf("%d",&op);if(op==1){ans=0;scanf("%d%d",&l,&r);query(l,r,1);printf("%lld\n",ans);}else if(op==2)//^{scanf("%d%d%d",&l,&r,&x);update1(l,r,x,1);}else if(op==3)//|{scanf("%d%d%d",&l,&r,&x);update2(l,r,x,1);}else if(op==4)//&{scanf("%d%d%d",&l,&r,&x);update3(l,r,x,1);}}}return 0;
}

明天就起身去银川了,希望这一次不是无功而返。两年努力只为最后一搏!!!加油
努力加油a啊,(o)/~

最新文章

  1. RabbitMQ之RPC实现
  2. 信息化监理公司的所有问题归到底是人的使用和管理
  3. 项目交付为什么失败?-记我在某个项目中的迷思
  4. MOSS2007的网站和工作区
  5. 天平游码读数例题_电子天平偏载误差的检定与处理
  6. 字符串,枚举,数值之间的转换
  7. 关于 SAP Spartacus 注入服务 UserAccountService 和 facade 的问题
  8. 更改Docker默认的images存储位置
  9. 安装sql server 2000
  10. 行云管家 V4.7产品新特性-国际化版本、支持Oracle的数据库审计、主机密码自动修改策略 发布日期:2018-11-22...
  11. [gic]-gicv2的bypass功能
  12. 杀毒软件和系统工具注册码
  13. cad相对坐标快捷键_CAD常用的快捷键
  14. 拆机芯片DIY一个STM32F401CCU6核心板
  15. 基于镶嵌数据集制作地貌晕眩图
  16. 四年级计算机考试反思,四年级期中考试反思
  17. 19【推荐系统16】CTRCVR联合学习
  18. 【Matplotlib绘制图像目录】Python数据可视化之美
  19. 保护系统 WinXP故障恢复控制台完全指引
  20. 素材网下载图片要 VIP ? 不存在的

热门文章

  1. Swift5.x使用纯代码创建NavigationTab控制器设置启动图Wb第1部分
  2. 数据库mysql表怎么设置外键_如何设置数据库中的外键
  3. python提取图片gps坐标_用python从.docx文件中提取GPS坐标
  4. Linux做软raid10,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  5. 如何用git上传文件
  6. python neo4j嵌入_Neo4j推出基于Python的嵌入式图数据存储
  7. oracle查询哪个sql占用资源,查询oracle最耗资源的sql语句
  8. XmlPullParser
  9. 腾讯 Omi 团队发布 mps - 原生小程序插上 JSX 、Less 和 Cloud 的翅膀
  10. Koa nuxt最佳实践前篇