题目链接

【洛谷】

题解

来做一下水题来掩饰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. CVE-2017-1000405 利用脏牛漏洞Linux提权复现

    当前路径: /var/www 磁盘列表: / 系统信息: Linux zico 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 ...

  2. jQuery(六)、事件

    1 页面载入 1.ready(fn) 当DOM载入完后绑定一个要执行的函数. 这是事件模块中最重要的一个函数,可以极大地提高web应用程序的响应速度. $(document).ready(functi ...

  3. Manacher's Algorithm(马拉车算法)

    ## 背景 该算法用于求字符串的最长回文子串长度. ## 参考文章 >[最长回文子串——Manacher 算法](https://segmentfault.com/a/1190000003914 ...

  4. 20190421-那些年使用过的CSS预处理器(CSS Preprocessor)之Sass and Less

    写在前面乱七八糟的前言: emmm,还是决定把Sass与Less单独出来写成一篇,可能会稍微好辣么一丢丢?TAT语法特性是真的香,通篇下来能吸收个10%自我感觉已经很nice了,毕竟渣渣的我有渣渣的自 ...

  5. 【English】八、食物相关

    一.beer.wine.coffee.soup.oil.juice beer 啤酒 They drink beer. wine 葡萄酒 Wine and coffee. coffee 咖啡 Wine ...

  6. 使用 prismjs 在网页中高亮显示代码

    最近在总结这一年来制作的网页模块,网站风格统一的情况下,网站页面结构不会改变,因此想记录一部分网站中统一的结构,方便日后维护. 用到的相关技术: vue, element-ui, prismjs, v ...

  7. 基于 libevent 开源框架实现的 web 服务器

    /* 原创文章 转载请附上原链接: https://www.cnblogs.com/jiujue/p/10707153.html   */ 自己实现的如有缺漏欢迎提出 直接代码 一切皆在代码中 首先是 ...

  8. ASP.NET实现二维码

    using System;using System.Collections.Generic;using System.Drawing;using System.Linq;using System.Te ...

  9. android申请多个权限的正确姿势

    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permi ...

  10. python已经感觉到放弃接近的day08

    居然能超过一个星期,我甚至都有点佩服我自己了,今天有两个新的知识点,一个简单一个难,先从简单的开始入手吧,进制,进制分为4种,2进制,8进制,10进制,16进制,一般最常用的就是10进制了,计算机用的 ...