博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Light Switching(SPOJ LITE)—— 线段树成段更新异或值
阅读量:7116 次
发布时间:2019-06-28

本文共 1942 字,大约阅读时间需要 6 分钟。

  题目连接:。

  题意:有若干个灯泡,每次对一段操作,这一段原先是亮的,就关了;原先是关着的,就打开。询问某一段的打开的灯泡的个数。

  分析:很显然的成段更新,但是一开始想着用某段是不是相同的来维护,敲了很长时间都没有实现。后来经过大力学长知道,对有懒惰标记的节点的亮着的灯泡的和这么更新即可:c[o]=r-l+1-c[o]; 简直奥义!

  另外,从这题可以看出,我对于成段更新的懒惰标记理解不够深刻。应该理解如下:对某点进行pushdown操作时,这点的sum值不更新,更新子节点的sum和add值即可

  具体见代码:

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #define t_mid (l+r>>1) 7 #define ls (o<<1) 8 #define rs (o<<1 | 1) 9 #define lson ls,l,t_mid10 #define rson rs,t_mid+1,r11 using namespace std;12 const int N = 100000 + 5;13 14 int n,m,c[N<<2];15 bool add[N<<2];16 void build(int o,int l,int r)17 {18 c[o]=0,add[o]=0;19 if(l==r) return;20 build(lson);21 build(rson);22 }23 void pushdown(int o,int len)24 {25 if(add[o])26 {27 c[ls]=(len-(len>>1))-c[ls];28 c[rs]=(len>>1)-c[rs];29 add[ls]^=1;30 add[rs]^=1;31 add[o]=0;32 }33 }34 void pushup(int o)35 {36 c[o] = c[ls] + c[rs];37 }38 void update(int o,int l,int r,int ql,int qr)39 {40 if(ql<=l && qr>=r)41 {42 add[o]^=1;43 c[o] = r-l+1-c[o];44 return;45 }46 pushdown(o,r-l+1);47 if(ql<=t_mid) update(lson,ql,qr);48 if(qr>t_mid) update(rson,ql,qr);49 50 pushup(o);51 }52 int query(int o,int l,int r,int ql,int qr)53 {54 if(ql<=l && qr>=r) return c[o];55 pushdown(o,r-l+1);56 int res = 0;57 if(ql<=t_mid) res += query(lson,ql,qr);58 if(qr>t_mid) res += query(rson,ql,qr);59 return res;60 }61 62 int main()63 {64 while(scanf("%d%d",&n,&m)==2)65 {66 build(1,1,n);67 68 while(m--)69 {70 int op,x,y;71 scanf("%d%d%d",&op,&x,&y);72 if(!op) update(1,1,n,x,y);73 else printf("%d\n",query(1,1,n,x,y));74 }75 }76 return 0;77 }

 

转载于:https://www.cnblogs.com/zzyDS/p/5647928.html

你可能感兴趣的文章
中台之上(五):业务架构和中台的难点,都是需要反复锤炼出标准模型
查看>>
阿里巴巴和京东进军美国电商界,分别针对企业用户和普通用户
查看>>
Git 2.19 对Diff、Branch和Grep等做了改进
查看>>
SignalR Core尝鲜
查看>>
区块链技术精华:四十种智能合约支持平台(三)
查看>>
阿里9000万欧元收购Flink母公司Data Artisans
查看>>
The Agile Mind-Set作者访谈
查看>>
反应式服务的性能应该如何测试?
查看>>
使用Java获取服务器IP地址
查看>>
Visual Studio 2017 15.7预览版发布
查看>>
阿里云出现大规模宕机,原因系IO HANG,或将做出赔偿
查看>>
区块链和数据科学:如果同时应用这两种技术,将会实现什么?
查看>>
基于Flink的超大规模在线实时反欺诈系统的建设与实践
查看>>
es动态index查询
查看>>
将敏捷应用于工业机械开发
查看>>
有赞HBase技术实践:读流程解析与优化
查看>>
微软最具价值技术专家:我的16年软件开发经验总结
查看>>
腾讯云+未来高峰对话:智能+时代的创新与探索
查看>>
C# 8中的默认接口方法
查看>>
实现TeX的算法:回首编程技术的过去三十年
查看>>