题目链接

【洛谷】

题解

来做一下水题来掩饰ZJOI2019考炸的心情QwQ。
很明显可以线段树。
维护两个值,\(Lazy\)懒标记表示当前区间是否需要翻转,\(s\)表示区间还有多少灯是亮着的。
那么每一次翻转,\(s\)就变成了\(n-s\),\(n\)表示区间内所有灯的数量。
线段树维护一下就可以了。

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 100000 + 6;
int n, m;
namespace seg {
    #define lc (nod << 1)
    #define rc (nod << 1 | 1)
    struct node {
        int l, r, tg, s;
    } tr[N << 2];
    void pushup(int nod) { tr[nod].s = tr[lc].s + tr[rc].s; }
    void pushdown(int nod, int l, int r) {
        if (!tr[nod].tg) return;
        int mid = (l + r) >> 1;
        tr[lc].s = (mid - l + 1) - tr[lc].s; tr[lc].tg ^= 1;
        tr[rc].s = (r - mid) - tr[rc].s; tr[rc].tg ^= 1;
        tr[nod].tg = 0;
    }
    void build(int nod, int l, int r) {
        tr[nod].l = l, tr[nod].r = r, tr[nod].s = 0, tr[nod].tg = 0;
        if (l == r) return;
        int mid = (l + r) >> 1;
        build(lc, l, mid); build(rc, mid + 1, r);
        pushup(nod);
    }
    void upd(int nod, int l, int r, int ql, int qr) {
        if (ql <= l && r <= qr) {
            tr[nod].s = (r - l + 1) - tr[nod].s;
            tr[nod].tg ^= 1;
            return;
        }
        int mid = (l + r) >> 1;
        pushdown(nod, l, r);
        if (ql <= mid) upd(lc, l, mid, ql, qr);
        if (qr > mid) upd(rc, mid + 1, r, ql, qr);
        pushup(nod);
    }
    int query(int nod, int l, int r, int ql, int qr) {
        if (ql <= l && r <= qr) return tr[nod].s;
        int mid = (l + r) >> 1, res = 0;
        pushdown(nod, l, r);
        if (ql <= mid) res += query(lc, l, mid, ql, qr);
        if (qr > mid) res += query(rc, mid + 1, r, ql, qr);
        return res;
    }
}
int main() {
    scanf("%d%d", &n, &m);
    seg::build(1, 1, n);
    for (int i = 1; i <= m; i ++) {
        int opt, x, y; scanf("%d%d%d", &opt, &x, &y);
        if (opt == 0) seg::upd(1, 1, n, x, y);
        else printf("%d\n", seg::query(1, 1, n, x, y));
    }
    return 0;
}

「洛谷3870」「TJOI2009」开关【线段树】的更多相关文章

  1. 洛谷P2982 [USACO10FEB]慢下来Slowing down(线段树 DFS序 区间增减 单点查询)

    To 洛谷.2982 慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) cows con ...

  2. Bzoj1018/洛谷P4246 [SHOI2008]堵塞的交通(线段树分治+并查集)

    题面 Bzoj 洛谷 题解 考虑用并查集维护图的连通性,接着用线段树分治对每个修改进行分治. 具体来说,就是用一个时间轴表示图的状态,用线段树维护,对于一条边,我们判断如果他的存在时间正好在这个区间内 ...

  3. 洛谷 P1083 借教室【二分+差分/线段树】

    二分mid,然后用1~mid的操作在差分序列上加减,最后把差分序列前缀和起来,看是否有有超过初始r值的 #include<iostream> #include<cstdio> ...

  4. 【洛谷4219】[BJOI2014]大融合(线段树分治)

    题目: 洛谷4219 分析: 很明显,查询的是删掉某条边后两端点所在连通块大小的乘积. 有加边和删边,想到LCT.但是我不会用LCT查连通块大小啊.果断弃了 有加边和删边,还跟连通性有关,于是开始yy ...

  5. 洛谷P4577 [FJOI2018]领导集团问题(dp 线段树合并)

    题意 题目链接 Sol 首先不难想到一个dp,设\(f[i][j]\)表示\(i\)的子树内选择的最小值至少为\(j\)的最大个数 转移的时候维护一个后缀\(mx\)然后直接加 因为后缀max是单调不 ...

  6. 洛谷P2178 [NOI2015]品酒大会(后缀自动机 线段树)

    题意 题目链接 Sol 说一个后缀自动机+线段树的无脑做法 首先建出SAM,然后对parent树进行dp,维护最大次大值,最小次小值 显然一个串能更新答案的区间是\([len_{fa_{x}} + 1 ...

  7. 洛谷.3437.[POI2006]TET-Tetris 3D(二维线段树)

    题目链接 下落一个d*s的方块,则要在这个平面区域找一个最高的h' 更新整个平面区域的值为h+h' 对于本题,维护最大高度h和all 对于平面的x轴维护一棵线段树t1,每个t1的节点维护对应y轴的两棵 ...

  8. 洛谷P3586 [POI2015]LOG(贪心 权值线段树)

    题意 题目链接 Sol 显然整个序列的形态对询问没什么影响 设权值\(>=s\)的有\(k\)个. 我们可以让这些数每次都被选择 那么剩下的数,假设值为\(a_i\)次,则可以\(a_i\)次被 ...

  9. 2018.08.11 洛谷P3224 [HNOI2012]永无乡(线段树合并)

    传送门 给出n个带点权的点,支持连边和查询连通块第k大. 这个貌似就是一道线段树合并的裸板啊... 代码: #include<bits/stdc++.h> #define N 100005 ...

随机推荐

  1. RSA签名和验签Util

    目录 1.DigitalSign类 2.CryptException异常类 3.加签示例 1.DigitalSign类 import org.apache.commons.codec.binary.B ...

  2. [代码笔记]JS保持函数单一职责,灵活组合

    比如下面的代码,从服务端请求回来的订单数据如下,需要进行以下处理1.根据 status 进行对应值得显示(0-进行中,1-已完成,2-订单异常)2.把 startTime 由时间戳显示成 yyyy-m ...

  3. wxpython 支持python语法高亮的自定义文本框控件的代码

    在研发闲暇时间,把开发过程中比较重要的一些代码做个珍藏,下面的代码内容是关于wxpython 支持python语法高亮的自定义文本框控件的代码,应该是对大家也有用. import keywordimp ...

  4. springCloud feign使用/优化总结

    基于springCloud Dalston.SR3版本 1.当接口参数是多个的时候 需要指定@RequestParam 中的value来明确一下. /** * 用户互扫 * @param uid 被扫 ...

  5. C#枚举(Enum)小结

    枚举概念 枚举类型(也称为枚举)提供了一种有效的方式来定义可能分配给变量的一组已命名整数常量.该类型使用enum关键字声明. 示例代码1 enum Day { Sunday, Monday, Tues ...

  6. Redis中5种数据结构的使用场景

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  7. LeetCode算法题-Flood Fill(Java实现)

    这是悦乐书的第306次更新,第325篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是733).图像由二维整数数组表示,每个整数表示图像的像素值(从0到 ...

  8. Java基础系列--02_运算符和程序的语句

    运算符: (1)算术运算符: +,-,*,/,%,++,--(加.减.乘.除.取余.自增,自减) ++和--的注意事项: a:他们的作用是自增或者自减 b:使用 1.单独使用 放在操作数据的前面和后面 ...

  9. ASP.NET基础知识汇总之WebConfig自定义节点详细介绍

    之前介绍过Webconfig的具体知识ASP.NET基础知识汇总之WebConfig各节点介绍.今天准备封装一个ConfigHelper类,涉及到了自定义节点的东东,平时虽然一直用,但也没有系统的总结 ...

  10. Spring Boot自定义Banner

    在2016年的最后一天,借用Spring Boot的Banner向各位程序猿同仁们问候一声:Happy New Year. 接下来我们就来介绍一下这个轻松愉快的自定义banner功能.实现的方式非常简 ...