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

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

看了一下其他题解的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. OpenFOAM——过渡管中的湍流

    本算例来自<ANSYS Fluid Dynamics Verification Manual>中的VMFL016:Turbulent Flow in a Transition Duct 一 ...

  2. 转载-SpringBoot结合线程池解决多线程问题实录;以及自己的总结

    原文地址:https://blog.csdn.net/GFJ0814/article/details/92422245 看看这篇文章(继续学习):https://www.jianshu.com/p/3 ...

  3. jTessBoxEditor训练识别库

    1.背景 前文已经简要介绍tesseract ocr引擎的安装及基本使用,其中提到使用-l eng参数来限定语言库,可以提高识别准确率及识别效率. 本文将针对某个网站的验证码进行样本训练,形成自己的语 ...

  4. 微信小程序反编译

    看到一个有意思的小程序,想了解是如何实现的,于是找了反编译方法. 安装adb驱动 百度安装adb驱动, 设计设置开发者模式,连接电脑. -> % adb devices List of devi ...

  5. Winform中自定义ZedGraph右键复制成功后的提示

    场景 Winform中实现ZedGraph中曲线右键显示为中文: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100115292 ...

  6. Jquery补充及插件

    此篇为jQuery补充的一些知识点,详细资料请看另一篇博客,地址:https://www.cnblogs.com/chenyanbin/p/10454503.html 一.jQuery中提供的两个函数 ...

  7. HTTP 压测工具wrk简介

    前段时间项目压测,看到开发命令行下使用这个命令进行压测非常简洁.方便,萌发了学习的兴趣,这里仅做简单介绍. 安装 wrk支持大多数UNIX系统,不支持Windows.需要操作系统支持LuaJIT和Op ...

  8. js清除定时器注意点

    如何这篇文章所述:https://www.cnblogs.com/mmykdbc/p/7418575.html js多次调用创建定时器的函数,会使定时器速度越来越快,多次调用定时器的使用场景比如:监听 ...

  9. ABP进阶教程5 - 多语言配置

    点这里进入ABP进阶教程目录 更新脚本 打开展示层(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\Views\Course\Index.js //用以存放Cours ...

  10. [b0040] python 归纳 (二五)_多进程数据共享和同步_信号量Semaphore

    # -*- coding: utf-8 -*- """ 多进程同步 使用信号量 multiprocessing.Semaphore 逻辑: 启动5个进程,打印,每个各自睡 ...