开关

luogu 3870

题目大意:

有n个灯,每一次会按一个区间中的所有灯(开变关,关变开,操作0),或询问某个区间中有多少个灯是亮着的(操作2),按操作进行,输出

输入样例#1:

4 5
0 1 2
0 2 4
1 2 3
0 2 4
1 1 4

输出样例#1:

1
2

解题思路:

用线段树,然后开关灯就是每次加1再模2,如果整个区间的话就直接用区间长度减去已亮灯数

代码:

#include<cstdio>
using namespace std;
int n,m,u,x,y;
struct rec
{int l,r,num,lazy;
}tree[400500];
void make(int dep)//建树
{if (tree[dep].l==tree[dep].r) return;int mid=(tree[dep].l+tree[dep].r)>>1;tree[dep*2].l=tree[dep].l,tree[dep*2].r=mid;tree[dep*2+1].l=mid+1,tree[dep*2+1].r=tree[dep].r;make(dep*2);make(dep*2+1);return;
}
void pass(int dep)//向下传递
{if (tree[dep].lazy){tree[dep*2].lazy^=1;//取反tree[dep*2+1].lazy^=1;tree[dep*2].num=tree[dep*2].r-tree[dep*2].l+1-tree[dep*2].num;//取反tree[dep*2+1].num=tree[dep*2+1].r-tree[dep*2+1].l+1-tree[dep*2+1].num;tree[dep].lazy=0;}
}
void change(int dep,int l,int r)
{if (tree[dep].l==l&&tree[dep].r==r)//到了{tree[dep].num=tree[dep].r-tree[dep].l+1-tree[dep].num;//取反tree[dep].lazy^=1;return;}if (tree[dep].l>=tree[dep].r) return;pass(dep);int mid=(tree[dep].l+tree[dep].r)>>1;if (r<=mid)//全在左边{change(dep*2,l,r);tree[dep].num=tree[dep*2].num+tree[dep*2+1].num;return;}if (l>mid){change(dep*2+1,l,r);tree[dep].num=tree[dep*2].num+tree[dep*2+1].num;return;}change(dep*2,l,mid);change(dep*2+1,mid+1,r);tree[dep].num=tree[dep*2].num+tree[dep*2+1].num;return;
}
int find(int dep,int l,int r)//查询
{if (tree[dep].l==l&&tree[dep].r==r) return tree[dep].num;if (tree[dep].l>=tree[dep].r) return 0;pass(dep);int mid=(tree[dep].l+tree[dep].r)>>1;if (r<=mid) return find(dep*2,l,r);if (l>mid) return find(dep*2+1,l,r);return find(dep*2,l,mid)+find(dep*2+1,mid+1,r);
}
int main()
{scanf("%d %d",&n,&m);tree[1].l=1;tree[1].r=n;make(1);for (int i=1;i<=m;++i){scanf("%d %d %d",&u,&x,&y);if (!u) change(1,x,y);//操作1else printf("%d\n",find(1,x,y));}
}

【线段树】开关(luogu 3870)相关推荐

  1. 【线段树】[LUOGU 守墓人] [LUOGU 维护序列] 线段树模板题

    题目: 题目链接:[LUOGU 守墓人] 题解: 线段树单点修改,区间修改,单点查询,区间查询,一系列线段树基本操作,模板打就好. (回头再补一个分块和树状数组的这种板子题,就是用分块和树状数组再写一 ...

  2. luogu P5142 区间方差(线段树、乘法逆元)

    luogu P5142 区间方差 本题要求维护模区间方差,很明显是一道数据结构题. 我们化简方差公式: 而平均数等于 可以发现,我们只需要维护序列的区间和和区间平方和,就可以维护平均数和方差. 区间和 ...

  3. luogu P4085 [USACO17DEC]Haybale Feast(尺取法 + 线段树)

    C.luogu P4085 [USACO17DEC]Haybale Feast 题目链接 直接开一个线段树维护即可. 注意开ll 线段树维护最大值.注意下标别写错了,比如tr[r] #include& ...

  4. BZOJ 1920 Luogu P4217 [CTSC2010]产品销售 (模拟费用流、线段树)

    题目链接 (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1920 (luogu) https://www.luogu.org/prob ...

  5. UOJ #395 BZOJ 5417 Luogu P4770 [NOI2018]你的名字 (后缀自动机、线段树合并)

    NOI2019考前做NOI2018题.. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=5417 (luogu) http ...

  6. Luogu P1198 BZOJ 1012 最大数 (线段树)

    Luogu P1198 BZOJ 1012 最大数 (线段树) 手动博客搬家: 本文发表于20170821 14:32:05, 原地址https://blog.csdn.net/suncongbo/a ...

  7. [luogu P4198] 楼房重建(线段树 + 思维)

    luogu 楼房重建 problem solution code problem 洛谷链接 solution 非常巧妙的一道题,对线段树的运用很灵活. 显然这个与原点的连线可以想到将每个点转化为与原点 ...

  8. 【线段树】二进制(luogu 4428)

    正题 luogu 4428 题目大意 给你一个01串,让你进行一下两种操作: 1.将其中一位取反 2.问你某一段中有多少个子串满足有一种排列方案,使得组成的二进制数是3的倍数 解题思路 不难发现,因为 ...

  9. 【DP】【线段树】基站选址(luogu 2605/金牌导航 数据结构优化DP-2)

    正题 luogu 2605 金牌导航 数据结构优化DP-2 题目大意 有若干个村庄在一条直线上,距离第一个村庄did_idi​,在该村庄建立基站要花费cic_ici​,如果在离该村不大于sis_isi ...

最新文章

  1. java log4j mysql_java – 配置log4j属性文件以存储在mysql数据库中
  2. 【转】1.6异步编程:IAsyncResult异步编程模型 (APM)
  3. python字符串类型图解_Python基础——数据类型(图解+实例,非常详细!)
  4. 深层剖析鸿蒙轻内核M核的动态内存如何支持多段非连续性内存
  5. java实现多线程抢单_来聊一聊3种实现JAVA多线程的方式吧
  6. 山东财经大学燕山学院计算机王栋,选修课Photoshop王栋的群谁有
  7. android 自定义加载圈,Android自定义加载控件实现数据加载动画
  8. 【数据分析师自学系列】Kettle下载安装、Kettle环境部署
  9. 计算机鼠标样式,鼠标指针
  10. 目标跟踪算法之DSST算法详解
  11. 基于java(ssm)校园办公室报修管理系统(java毕业设计)
  12. TX2 开机自动启动程序
  13. STM32CubeIDE USB Audio声卡 WM8978 + I2S
  14. ubuntu14.04自定义系统默认xp字体
  15. html写樱花树,写樱花树的作文
  16. ipad和iphone切图_如何在iPhone和iPad上使用触控板模式选择文本
  17. 内存稳定性测试软件(MemTest)
  18. I2C器件的从设备地址的设置(以AT24C02为例)
  19. python requests cookie处理
  20. Bugzilla使用说明

热门文章

  1. linux系统中常见的目录,Linux系统中常见的目录名称以及相应内容
  2. php restful规范,RESTFul API规范 详细指南
  3. php 常用rpc框架,php的轻量级rpc框架yar
  4. 软件构造学习笔记-实验2
  5. leetcode377. 组合总和 Ⅳ
  6. leetcode429. N 叉树的层序遍历(层序遍历05)
  7. 7-1 矩阵链相乘问题 (20 分)(思路+详解+题目解析) 动态规划做法
  8. 创建型模式——原型模式
  9. 华为任职资格_看了华为的任职资格体系,你就明白员工为啥这么拼?
  10. 伦斯勒理工大学计算机专业好申请吗,2020年伦斯勒理工学院申请难度