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

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

看了一下其他题解的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. perl: warning: Setting locale failed. 解决

    perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAG ...

  2. Gitlab安装过程

    sudo yum install -y curl policycoreutils-pythonopenssh-server sudo systemctl enable sshd sudo system ...

  3. HTML连载42-清空默认边距、文字行高

    一.            webstorm取色技巧:webstorm内置了颜色取色器,我们对某种颜色未知的时候,可以利用下图中的取色器,进行颜色识别. 二.系统会默认给body添加外边距,因此我们对 ...

  4. MySQL索引知识学习笔记

    目录 一.索引的概念 二.索引分类 三.索引用法 四 .索引架构简介 五.索引适用的情况 六.索引不适用的情况 继我的上篇博客:Oracle索引知识学习笔记,再记录一篇MySQL的索引知识学习笔记,本 ...

  5. 【学习笔记】动态规划—各种 DP 优化

    [学习笔记]动态规划-各种 DP 优化 [大前言] 个人认为贪心,\(dp\) 是最难的,每次遇到题完全不知道该怎么办,看了题解后又瞬间恍然大悟(TAT).这篇文章也是花了我差不多一个月时间才全部完成 ...

  6. 数据库——SQL-SERVER CREATE-TABLES

    给出数据库实验所需要的“CREATE-TABLES.SQL”文件 use master go if exists (select * from dbo.sysdatabases where name ...

  7. Spring中ApplicationListener的使用

    背景 ApplicationListener是Spring事件机制的一部分,与抽象类ApplicationEvent类配合来完成ApplicationContext的事件机制. 如果容器中存在Appl ...

  8. fastjson对于yyyy-MM-dd HH:mm格式的反序列化问题

    原创GrayHJX 发布于2017-03-14 22:56:33 阅读数 6851  收藏 展开 问题:最近在工作中遇到这么一个问题:有个实体类,它有个date类型的属性,当在这个属性加上fastjs ...

  9. 读取树莓派4B处理器(CPU)的实时温度

    读取树莓派4B处理器(CPU)的实时温度 树莓派发布4B后,性能提升了不少,但是温度也是高的不行,所以最好配置一个小风扇和散热片还是比较好的 俩种办法都可以实现 1.Shell命令读取 打开终端 cd ...

  10. 教你如何添加Xcode 9.3配置包?(安装流程可供其他版本安装参考)

    1.准备好你想要的Xcode版本的安装包 ,这里以Xcode 9.3为例.                        →                   2.打开Xcode开发工具的安装路径 ...