看了一下题解,显然在做无用功啊,而且麻烦了许多,但是这道题真心不难,显然是一个区间修改的题目,然后查询的题目

我的线段树只需要记录一个量:区间和

看了一下其他题解的pushdown函数,发现真心写的很麻烦

这里有一个很巧妙的解法:

如果这个区域被染成了白棋,那么直接把这个区间总和清零就好了

然后向下传值,只需要把他的儿子节点sum清零就好了

那就直接上代码吧

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm> #define lson i*2,l,mid
#define rson i*2+1,mid+1,r //宏定义
#define I_copy_the_answer return 0;
using namespace std; int n,m;
struct tree{
int l,r,sum;
}t[]; //线段树最大可能达到四倍空间,因此数组开四倍以上 void build_tree(int i,int l,int r)
{
t[i].l=l; //这东西没什么用,但是查错的时候挺方便的
t[i].r=r;
if(l==r)
{
t[i].sum=; //每一个黑色棋子
return ;
}
int mid=(l+r)/;
build_tree(lson);
build_tree(rson);
t[i].sum=t[i*].sum+t[i*+].sum; //这个不多睡了吧
return ;
} int pushdown(int i) //简短的pushdown
{
if(!t[i].sum) //!即取反 0取反即1
t[i*].sum=,t[i*+].sum=;
} void change_tree(int i,int l,int r,int a,int b)
{
if(l>=a&&r<=b)
{
t[i].sum=;
return ;
}
pushdown(i);
int mid=(l+r)/;
if(a<=mid) change_tree(lson,a,b);
if(b>mid) change_tree(rson,a,b);
t[i].sum=t[i*].sum+t[i*+].sum;
return ;
} int ask_color_tree(int i,int l,int r,int a,int b) //这个函数其实可以不写,输出t[1].sum即可,但是为了演示一下写了出来
{
if(l>=a&&r<=b)
{
return t[i].sum;
}
pushdown(i);
int mid=(l+r)/;
int ans=;
if(a<=mid) ans+=ask_color_tree(lson,a,b);
if(b>mid) ans+=ask_color_tree(rson,a,b);
return ans;
} int main()
{
int i,j;
scanf("%d %d",&n,&m);
build_tree(,,n);
for(i=;i<=m;i++)
{
int t1,t2;
scanf("%d %d",&t1,&t2);
change_tree(,,n,t1,t2);
printf("%d\n",ask_color_tree(,,n,,n)); //可以不要,直接输出t[1].sum
}
I_copy_the_answer //你就别抄这个代码了吧
}

洛谷 P1840 【Color the Axis_NOI导刊2011提高(05)】 题解的更多相关文章

  1. luogu P1840 Color the Axis_NOI导刊2011提高(05)|并查集

    题目描述 在一条数轴上有N个点,分别是1-N.一开始所有的点都被染成黑色.接着我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色.请输出每个操作执行后剩余黑色点的个数. 输入格式 输入一行为N ...

  2. 洛谷P1808 单词分类_NOI导刊2011提高(01) 字符串排序

    洛谷P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且 ...

  3. 洛谷 P1808 单词分类_NOI导刊2011提高(01)

    P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且仅当 ...

  4. 洛谷P1809 过河问题_NOI导刊2011提高(01)

    To 洛谷.1809 过河问题 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时 ...

  5. Shortest Path Codeforces - 59E || 洛谷P1811 最短路_NOI导刊2011提高(01)

    https://codeforces.com/contest/59/problem/E 原来以为不会..看了题解发现貌似自己其实是会的? 就是拆点最短路..拆成n^2个点,每个点用(i,j)表示,表示 ...

  6. 【luoguP1840】 Color the Axis_NOI导刊2011提高(05)

    题目描述 在一条数轴上有N个点,分别是1—N.一开始所有的点都被染成黑色.接着我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色.请输出每个操作执行后剩余黑色点的个数. 输入格式 输入一行为N ...

  7. 洛谷——P1795 无穷的序列_NOI导刊2010提高(05)

    P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...

  8. 洛谷P1776 宝物筛选_NOI导刊2010提高(02)

    P1776 宝物筛选_NOI导刊2010提高(02) 题目描述 终于,破解了千年的难题.小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎.但是这里的宝物实在是太多了, ...

  9. 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)

    P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...

随机推荐

  1. 持续集成(CI):WEB自动化+Allure+Jenkins定时构建

    一.allure插件安装 pytest可以通过allure集成展示优美的测试报告,同样allure也可以与Jenkins集成,并且Jenkins有构建记录,所以可以看到历史构建曲线图,通过曲线图可以清 ...

  2. jQuery 源码分析(十四) 数据操作模块 类样式操作 详解

    jQuery的属性操作模块总共有4个部分,本篇说一下第3个部分:类样式操作部分,用于修改DOM元素的class特性的,对于类样式操作来说,jQuery并没有定义静态方法,而只定义了实例方法,如下: a ...

  3. [转]使用IConfigureNamedOptions和ConfigureAll配置命名选项

    这是我上一篇关于在ASP.NET Core 2.x中使用多个强类型设置实例的后续文章.在文章的结尾,我介绍了命名选项的概念,该选项已添加到ASP.NET Core 2.0中.在本文中,我将详细介绍如何 ...

  4. MySQL-8.0.18 引入了破坏性变更

    MySQL-8.0.18 引入了破坏性变更 变更日志里面有这样一项 When the server is run with --initialize, there is no reason to lo ...

  5. VS2019安装好后,经常打不开软件没反应解决方法

    原文地址:https://blog.csdn.net/FL1623863129/article/details/89013137 VS2019于昨日正式发布,博主立马下载一个专业版尝尝鲜,但是发现项目 ...

  6. .net core入门-项目启动时报错:HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure

    在打开Core的项目首页时,页面有时候会出现:HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure的错误,但是这里面看不出任何错误详情,这个时候 ...

  7. 帝国CMS QQ登陆接口插件 适用于所有帝国7.2版本

    插件名称:帝国CMS-QQ登录插件 插件作者:帝国CMS官方 插件介绍:帝国CMS系统的QQ登录插件. 官方网站:http://www.phome.net ---------------------- ...

  8. python中的随机数生成

    结论先行 生成随机数: # salt = ''.join(random.choices(string.ascii_letters + string.digits, k=3)) salt = ''.jo ...

  9. 021.Docker mysql启动时执行初始化sql

    1.拉取Mysql镜像 # docker pull mysql:5.7 2.检查mysql镜像 # docker inspect mysql:5.7 ## "Entrypoint" ...

  10. 5.JavaCC官方入门指南-概述

    一.前言   在最开始使用JavaCC的时候,从网上查询了许多资料,但是网上的资料水平是参差不齐的,走了许多弯路,不得已自己查阅了英文版官网文档.令我伤心的是最后我回过头来再看那些博客资料时,发现其实 ...