在线段树上记录长度、区间01翻转标记、当前1个数。传递tag的时候用长度-1个数即可

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. const int N=100005;
  5. int n,m;
  6. struct qwe
  7. {
  8. int l,r,len,v,tg;
  9. }t[N<<2];
  10. int read()
  11. {
  12. int r=0,f=1;
  13. char p=getchar();
  14. while(p>'9'||p<'0')
  15. {
  16. if(p=='-')
  17. f=-1;
  18. p=getchar();
  19. }
  20. while(p>='0'&&p<='9')
  21. {
  22. r=r*10+p-48;
  23. p=getchar();
  24. }
  25. return r*f;
  26. }
  27. void pd(int ro)
  28. {
  29. if(t[ro].tg)
  30. {
  31. t[ro<<1].tg^=1;
  32. t[ro<<1].v=t[ro<<1].len-t[ro<<1].v;
  33. t[ro<<1|1].tg^=1;
  34. t[ro<<1|1].v=t[ro<<1|1].len-t[ro<<1|1].v;
  35. t[ro].tg=0;
  36. }
  37. }
  38. void build(int ro,int l,int r)
  39. {
  40. t[ro].l=l,t[ro].r=r,t[ro].len=r-l+1;
  41. if(l==r)
  42. return;
  43. int mid=(l+r)>>1;
  44. build(ro<<1,l,mid);
  45. build(ro<<1|1,mid+1,r);
  46. }
  47. void update(int ro,int l,int r)
  48. {
  49. if(t[ro].l==l&&t[ro].r==r)
  50. {
  51. t[ro].tg^=1,t[ro].v=t[ro].len-t[ro].v;
  52. return;
  53. }
  54. pd(ro);
  55. int mid=(t[ro].l+t[ro].r)>>1;
  56. if(r<=mid)
  57. update(ro<<1,l,r);
  58. else if(l>mid)
  59. update(ro<<1|1,l,r);
  60. else
  61. {
  62. update(ro<<1,l,mid);
  63. update(ro<<1|1,mid+1,r);
  64. }
  65. t[ro].v=t[ro<<1].v+t[ro<<1|1].v;
  66. }
  67. int ques(int ro,int l,int r)
  68. {
  69. if(t[ro].l==l&&t[ro].r==r)
  70. return t[ro].v;
  71. pd(ro);
  72. int mid=(t[ro].l+t[ro].r)>>1;
  73. if(r<=mid)
  74. return ques(ro<<1,l,r);
  75. else if(l>mid)
  76. return ques(ro<<1|1,l,r);
  77. else
  78. return ques(ro<<1,l,mid)+ques(ro<<1|1,mid+1,r);
  79. }
  80. int main()
  81. {
  82. n=read(),m=read();
  83. build(1,1,n);
  84. while(m--)
  85. {
  86. int o=read(),x=read(),y=read();
  87. if(o==0)
  88. update(1,x,y);
  89. else
  90. printf("%d\n",ques(1,x,y));
  91. }
  92. return 0;
  93. }

bzoj 1230: [Usaco2008 Nov]lites 开关灯【线段树】的更多相关文章

  1. BZOJ 1230: [Usaco2008 Nov]lites 开关灯( 线段树 )

    线段树.. --------------------------------------------------------------------------------- #include< ...

  2. BZOJ 1230 [Usaco2008 Nov]lites 开关灯:线段树异或

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1230 题意: 有n盏灯,一开始全是关着的. 有m次操作(p,a,b).p为0,则将区间[a ...

  3. B1230 [Usaco2008 Nov]lites 开关灯 线段树

    就是线段树维护异或和.之前我线段树区间修改down都是修改当前区间,结果debug出不来,改成每次向下了. 题干: Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶 ...

  4. bzoj:1230: [Usaco2008 Nov]lites 开关灯

    Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每 ...

  5. 1230: [Usaco2008 Nov]lites 开关灯

    1230: [Usaco2008 Nov]lites 开关灯 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1162  Solved: 589[Sub ...

  6. BZOJ 1230 Usaco2008 Nov 开关灯 线段树

    思路: 用线段树模拟题中的操作就好 (标记异或 长度=区间总长度-当前已开灯的长度) //By SiriusRen #include <cstdio> using namespace st ...

  7. 【线段树】Bzoj1230 [Usaco2008 Nov]lites 开关灯

    Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每 ...

  8. BZOJ 1230 Usaco2008 Nov 开关灯

    [题意概述] 给出一个01序列,初始时序列全为0,每次有修改操作或询问操作,修改操作要求把L~R区间中的0变成1,1变成0,查询操作要求输出L~R区间的1的个数 [题解] 线段树. 每次区间修改把区间 ...

  9. BZOJ1230 [Usaco2008 Nov]lites 开关灯

    区间not,求区间1的个数...线段树裸题 然而窝并不会线段树 我们可以对序列分块,每个块记录0/1的个数和tag表示又没有区间not过就好了 /*************************** ...

随机推荐

  1. SGU 194 无源无汇可行流求解

    题意:n个点,m条边,每条边有容量限制 l--c,每个点满足容量平衡(流入等于流出),求可行解 无源无汇可行流问题,建立以一个超级源点和超级汇点,由于原来最大流问题时候,流量下界其实为0, 所以要转化 ...

  2. 洛谷——P1546 最短网络 Agri-Net

    P1546 最短网络 Agri-Net 题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 题目描述 约翰已经给他的农场安排了一 ...

  3. Windows下SVN服务器及客户端的使用

    原文地址:windows下配置VisualSVN Server服务器 作者:Deem_passion 下载安装文件: 服务端安装文件:VisualSVN-Server-1.6.2 客户端安装文件:To ...

  4. 【nginx】【转】Nginx核心进程模型

    一.Nginx整体架构 正常执行中的nginx会有多个进程,最基本的有master process(监控进程,也叫做主进程)和woker process(工作进程),还可能有cache相关进程.   ...

  5. uva live 12846 A Daisy Puzzle Game

    假设下一个状态有必败.那么此时状态一定是必胜,否则此时状态一定是必败 状压DP #include<iostream> #include<map> #include<str ...

  6. Android开发艺术-第二章 IPC 机制

    2.1 Android IPC 简单介绍 IPC 意为进程间通信或者跨进程通信,线程是 CPU 调度的最小单元,是一种有限的系统资源. 进程一般指一个执行单元.不论什么操作系统都须要对应的 IPC 机 ...

  7. VM虚拟机ping不通局域网其他主机的解决办法

    1 我的笔记本的无线网卡是自动获取IP,并且是通过无线网卡上网.   2 我的有线网卡是通过自己设定IP跟局域网的其他机器连通.当前设定的IP为172.16.17.2   3我需要连接的局域网另一个主 ...

  8. SQL FULL OUTER JOIN 关键字

    SQL FULL OUTER JOIN 关键字 SQL FULL OUTER JOIN 关键字 FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配 ...

  9. Centos java 安装

    第一步:查看Linux自带的JDK是否已安装 (卸载centOS已安装的1.4) 安装好的CentOS会自带OpenJdk,用命令 java -version ,会有下面的信息: java versi ...

  10. iOS 开发者中的个人账号与组织账号之间区别

    苹果对开发者主要分为3类:个人.组织(公司.企业).教育机构.即: 1.个人(Individual) 2.组织(Organizations) 组织类又分为2个小类: (1)公司(Company) (2 ...