简单的省选题......

打异或标记即可。

 1 #include<bits/stdc++.h>
2 const int N=2e5+10;
3 using namespace std;
4 int n,m,a,b,c;
5 struct node{
6 int l,r,num,lazy;
7 }t[N<<2];
8 int read(){
9 int x=0,f=1;char c=getchar();
10 while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
11 while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
12 return x*f;
13 }
14
15 void pushup(int k){
16 t[k].num=t[k<<1].num+t[k<<1|1].num;
17 }
18
19 void pushdown(int k){
20 if(t[k].lazy){
21 t[k<<1].num=t[k<<1].r-t[k<<1].l+1-t[k<<1].num;
22 t[k<<1|1].num=t[k<<1|1].r-t[k<<1|1].l+1-t[k<<1|1].num;
23 t[k<<1].lazy^=1;
24 t[k<<1|1].lazy^=1;
25 t[k].lazy=0;
26 }
27 }
28
29 void build(int k,int l,int r){
30 t[k].l=l,t[k].r=r;
31 if(l==r) return ;
32 int mid=(l+r)>>1;
33 build(k<<1,l,mid);build(k<<1|1,mid+1,r);
34 }
35
36 void change(int k,int l,int r){
37 if(t[k].l>=l && t[k].r<=r){
38 t[k].lazy^=1;
39 t[k].num=t[k].r-t[k].l+1-t[k].num;
40 return ;
41 }
42 pushdown(k);
43 int mid=(t[k].l+t[k].r)>>1;
44 if(l<=mid) change(k<<1,l,r);
45 if(r>mid) change(k<<1|1,l,r);
46 pushup(k);
47 }
48
49 int query(int k,int l,int r){
50 if(t[k].l>=l && t[k].r<=r) return t[k].num;
51 pushdown(k);
52 int ans=0;
53 int mid=(t[k].l+t[k].r)>>1;
54 if(l<=mid) ans+=query(k<<1,l,r);
55 if(r>mid) ans+=query(k<<1|1,l,r);
56 return ans;
57 }
58
59 int main(){
60 n=read(),m=read();
61 build(1,1,n);
62 while(m--){
63 c=read(),a=read(),b=read();
64 if(c==0) change(1,a,b);
65 else cout<<query(1,a,b)<<endl;
66 }
67 }

洛谷P3870 [TJOI2009] 开关 (线段树)的更多相关文章

  1. 洛谷P3870 [TJOI2009]开关

    题目描述 现有\(N(2 ≤ N ≤ 100000)\)盏灯排成一排,从左到右依次编号为:\(1,2,......,N\).然后依次执行\(M(1 ≤ M ≤ 100000)\)项操作,操作分为两种: ...

  2. 洛谷 P3870 [TJOI2009]开关

    题意简述 有n盏灯,默认为关,有两个操作: 1.改变l~r的灯的状态(把开着的灯关上,关着的灯打开) 2.查询l~r开着的灯的数量 题解思路 维护一个线段树,支持区间修改,区间查询 懒标记每次^1 代 ...

  3. 洛谷 P3870 [TJOI2009]开关 题解

    原题链接 前置知识: 线段树的单点.区间的修改与查询. 一看,我们需要维护两个操作: 区间取反: 区间求和. (因为区间 \(1\) 的个数,就是区间的和) 典型的 线段树 . 如果你只会线段树的 区 ...

  4. 【BZOJ】1012: [JSOI2008]最大数maxnumber /【洛谷】1198(线段树)

    Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. 插 ...

  5. 洛谷题解P4314CPU监控--线段树

    题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...

  6. 洛谷P3372/poj3468(线段树lazy_tag)(询问区间和,支持区间修改)

    洛谷P3372 //线段树 询问区间和,支持区间修改 #include <cstdio> using namespace std; struct treetype { int l,r; l ...

  7. 洛谷P4065 [JXOI2017]颜色(线段树)

    题意 题目链接 Sol 线段树板子题都做不出来,真是越来越菜了.. 根据题目描述,一个合法区间等价于在区间内的颜色没有在区间外出现过. 所以我们可以对于每个右端点,统计最长的左端点在哪里,刚开始以为这 ...

  8. 洛谷P5111 zhtobu3232的线段树

    题意:给定线段树,上面若干个节点坏了,求能表示出多少区间. 区间能被表示出当且仅当拆出来的log个节点都是好的. 解:每个区间在最浅的节点处计算答案. 对于每个节点维护从左边过来能有多少区间,从右边过 ...

  9. 洛谷P3960 列队 NOIp2017 线段树/树状数组/splay

    正解:动态开点线段树 解题报告: 传送门! 因为最近学主席树的时候顺便get到了动态开点线段树?刚好想起来很久很久以前就想做结果一直麻油做的这题,,,所以就做下好了QAQ 然后说下,这题有很多种方法, ...

随机推荐

  1. fill-available,min-content,max-content,fit-content的作用机制

    fill-available:宽度由外部元素决定(div)min-content:宽度由内部元素宽度缩小到最小的最大内部元素宽度决定max-content:宽度由内部元素宽度扩大到最大后的最大内部元素 ...

  2. 使min-height子元素height百分比生效的2种方式

    方式1,使用flex <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  3. ABC251 题解

    典中典比赛 . 目录 A - Six Characters B - At Most 3 (Judge ver.) C - Poem Online Judge D - At Most 3 (Contes ...

  4. javascript相邻节点元素获取

    <script> window.onload = function () { var myLinkItem = document.getElementById('linkItem'); v ...

  5. java学习第三天常用类.day12

    String String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了 如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & String ...

  6. Excel 统计函数(三):AVERAGE 和 AVERAGEA

    AVERAGE 只能计算纯数值,如果引用的单元格是非数值,不会被计入总数:AVERAGEA 可以计算逻辑值.代表数字的文本等. 假如下列有一个表格,分别使用两种算术评价函数计算平均值. [过程]AVE ...

  7. mysql验证隔离级别

    mysql更改隔离级别 参考https://blog.csdn.net/qq_21299835/article/details/121189565 关闭mysql事务自动提交:set autocomm ...

  8. 简易的DragDropCarousel 拖拽轮播控件

    上一篇文章有写到 自动轮播的控件  简易的AutoPlayCarousel 轮播控件 - 黄高林 - 博客园 (cnblogs.com) 本章是基于自动轮播的一种衍生,通过拖拽鼠标进切换 直接上代码 ...

  9. 第五十九篇:关于Vue

    好家伙,前面关于vue的学习太散太乱了,我决定重新整理一下知识框架,当作复习了,并且在其中补充一些概念 先提出一个问题:怎么把数据弄到页面上? 若不借助vue,把数据填充到页面上, 我们需要操作dom ...

  10. 流媒体协议扫盲(rtp/rtcp/rtsp/rtmp/mms/hls)

    RTP           参考文档 RFC3550/RFC3551 Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议.RTP协议详细 ...