洛谷 P1840 【Color the Axis_NOI导刊2011提高(05)】 题解
看了一下题解,显然在做无用功啊,而且麻烦了许多,但是这道题真心不难,显然是一个区间修改的题目,然后查询的题目
我的线段树只需要记录一个量:区间和
看了一下其他题解的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)】 题解的更多相关文章
- luogu P1840 Color the Axis_NOI导刊2011提高(05)|并查集
题目描述 在一条数轴上有N个点,分别是1-N.一开始所有的点都被染成黑色.接着我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色.请输出每个操作执行后剩余黑色点的个数. 输入格式 输入一行为N ...
- 洛谷P1808 单词分类_NOI导刊2011提高(01) 字符串排序
洛谷P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且 ...
- 洛谷 P1808 单词分类_NOI导刊2011提高(01)
P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且仅当 ...
- 洛谷P1809 过河问题_NOI导刊2011提高(01)
To 洛谷.1809 过河问题 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时 ...
- Shortest Path Codeforces - 59E || 洛谷P1811 最短路_NOI导刊2011提高(01)
https://codeforces.com/contest/59/problem/E 原来以为不会..看了题解发现貌似自己其实是会的? 就是拆点最短路..拆成n^2个点,每个点用(i,j)表示,表示 ...
- 【luoguP1840】 Color the Axis_NOI导刊2011提高(05)
题目描述 在一条数轴上有N个点,分别是1—N.一开始所有的点都被染成黑色.接着我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色.请输出每个操作执行后剩余黑色点的个数. 输入格式 输入一行为N ...
- 洛谷——P1795 无穷的序列_NOI导刊2010提高(05)
P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...
- 洛谷P1776 宝物筛选_NOI导刊2010提高(02)
P1776 宝物筛选_NOI导刊2010提高(02) 题目描述 终于,破解了千年的难题.小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎.但是这里的宝物实在是太多了, ...
- 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...
随机推荐
- Rails + Webpacker + Puma + Nginx 部署
准备 ssh 登录 首先 ssh 登录服务器,免密码登录可以参考 ssh 免密码登录服务器 创建部署用户 $ sudo adduser deploy 安装依赖 Ruby 这里使用 RVM 安装和管理 ...
- golang数据结构之递归解决迷宫问题
简单来说:递归就是函数/方法自己调用自己,只是每次传入不同的变量. 递归可以解决各种数学问题:n皇后问题.阶乘问题.汉诺塔.迷宫问题.球和篮子问题等等: maze.go package maze im ...
- Python连载52-SOCKET编程示例
一.UDP编程 1.客户端Client:发起访问的一方. 2.服务器端 3.server段编程 (1)建立socket,socket是负责具体通信的一个实例 (2)绑定,为创建的socket指派固定的 ...
- Java字符串面试问答
字符串是使用最广泛的Java的类之一.在这里,我列出了一些重要的Java的字符串面试问答. 这将有助于您全面了解String并解决面试中与String有关的任何问题. Java基础面试问题 Java中 ...
- IT兄弟连 HTML5教程 HTML5的基本语法 了解HTML及运行原理
了解HTML HTML(HyperText Marked Language)即超文本标记语言,是一种用来制作超文本文档的简单标记语言.我们在浏览网页时看到的一些丰富的影像.文字.图片等内容都是通过HT ...
- 使用openpyxl模块进行封装,高效处理excel测试数据
from openpyxl import load_workbook from scripts.handle_config import conf from scripts.constants imp ...
- ubuntu 库依赖问题
安装apt-file, 可以查找各种库依赖的文件,或查找某个app的依赖库: sudo apt install apt-file apt-file update apt-flie search rpc ...
- 【51Nod1584】加权约数和(数论)
[51Nod1584]加权约数和(数论) 题面 51Nod 题解 要求的是\[\sum_{i=1}^n\sum_{j=1}^n max(i,j)\sigma(ij)\] 这个\(max\)太讨厌了,直 ...
- SpringCloud的入门学习之Netflix-eureka(Eureka的集群版搭建)
1.Eureka单机版的话,可能会出现单点故障,所以要保障Eureka的高可用,那么可以进行搭建Eureka的集群版. 高可用的Eureka的注册中心,将注册中心服务部署到多台物理节点上,形成一个集群 ...
- C#NPOI对Excel的操作、导入导出时异常处理、最全的NPOI资料在这里~
一.Excel理论知识 最新版NPOI2.4.1链接:https://pan.baidu.com/s/1iTgJi2hGsRQHyw2S_4dIUw 提取码:adnq • 整个Excel表格叫做工作 ...