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

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

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

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

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

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

那就直接上代码吧

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<queue>
 6 #include<stack>
 7 #include<vector>
 8 #include<map>
 9 #include<set>
10 #include<algorithm>
11
12 #define lson i*2,l,mid
13 #define rson i*2+1,mid+1,r  //宏定义
14 #define I_copy_the_answer return 0;
15 using namespace std;
16
17 int n,m;
18 struct tree{
19     int l,r,sum;
20 }t[1000860];  //线段树最大可能达到四倍空间,因此数组开四倍以上
21
22 void build_tree(int i,int l,int r)
23 {
24     t[i].l=l;  //这东西没什么用,但是查错的时候挺方便的
25     t[i].r=r;
26     if(l==r)
27     {
28         t[i].sum=1;  //每一个黑色棋子
29         return ;
30     }
31     int mid=(l+r)/2;
32     build_tree(lson);
33     build_tree(rson);
34     t[i].sum=t[i*2].sum+t[i*2+1].sum; //这个不多睡了吧
35     return ;
36 }
37
38 int pushdown(int i)   //简短的pushdown
39 {
40     if(!t[i].sum)  //!即取反 0取反即1
41     t[i*2].sum=0,t[i*2+1].sum=0;
42 }
43
44 void change_tree(int i,int l,int r,int a,int b)
45 {
46     if(l>=a&&r<=b)
47     {
48         t[i].sum=0;
49         return ;
50     }
51     pushdown(i);
52     int mid=(l+r)/2;
53     if(a<=mid) change_tree(lson,a,b);
54     if(b>mid) change_tree(rson,a,b);
55     t[i].sum=t[i*2].sum+t[i*2+1].sum;
56     return ;
57 }
58
59 int ask_color_tree(int i,int l,int r,int a,int b)  //这个函数其实可以不写,输出t[1].sum即可,但是为了演示一下写了出来
60 {
61     if(l>=a&&r<=b)
62     {
63         return t[i].sum;
64     }
65     pushdown(i);
66     int mid=(l+r)/2;
67     int ans=0;
68     if(a<=mid) ans+=ask_color_tree(lson,a,b);
69     if(b>mid) ans+=ask_color_tree(rson,a,b);
70     return ans;
71 }
72
73 int main()
74 {
75     int i,j;
76     scanf("%d %d",&n,&m);
77     build_tree(1,1,n);
78     for(i=1;i<=m;i++)
79     {
80         int t1,t2;
81         scanf("%d %d",&t1,&t2);
82         change_tree(1,1,n,t1,t2);
83         printf("%d\n",ask_color_tree(1,1,n,1,n));  //可以不要,直接输出t[1].sum
84     }
85     I_copy_the_answer //你就别抄这个代码了吧
86 }

转载于:https://www.cnblogs.com/zsx6/p/11174399.html

洛谷 P1840 【Color the Axis_NOI导刊2011提高(05)】 题解相关推荐

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

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

  2. 【洛谷P1795 无穷的序列_NOI导刊2010提高(05)】模拟

    分析 map搞一下 AC代码 #include <bits/stdc++.h> using namespace std; map<int,int> mp; inline int ...

  3. 单人纸牌_NOI导刊2011提高(04)

    单人纸牌 时间限制: 1 Sec  内存限制: 128 MB 题目描述 单人纸牌游戏,共 36 张牌分成 9 叠,每叠 4 张牌面向上.每次,游戏者可以从某两个不同的牌堆最顶上取出两张牌面相同的牌(如 ...

  4. 洛谷P1807 最长路_NOI导刊2010提高(07) 求有向无环图的 最长路 图论

    洛谷P1807 最长路_NOI导刊2010提高(07) 图论 求有向无环图的 最长路 首先阐明一点 最长路dijkstra 是不能做 (当然我是不会做的,不过我貌似看到过网上的dalao有用dijst ...

  5. 洛谷 P1800 software_NOI导刊2010提高(06)(二分答案+DP检验)

    P1800 software_NOI导刊2010提高(06) 标签 二分答案 难度 普及/提高- 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每 ...

  6. 洛谷 P1796 汤姆斯的天堂梦_NOI导刊2010提高(05)

    P1796 汤姆斯的天堂梦_NOI导刊2010提高(05) 题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的 ...

  7. 洛谷——P1775 古代人的难题_NOI导刊2010提高(02) P1936 水晶灯火灵(斐波那契数列)...

    P1775 古代人的难题_NOI导刊2010提高(02) P1936 水晶灯火灵 斐波那契数列 1.x,y∈[1-k],且x,y,k∈Z 2.(x^2-xy-y^2)^2=1 给你一个整数k,求一组满 ...

  8. 洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)

    P1775 古代人的难题_NOI导刊2010提高(02) 题目描述 门打开了,里面果然是个很大的厅堂.但可惜厅堂内除了中央的一张羊皮纸和一支精致的石笔,周围几具骷髅外什么也没有.难道这就是王室的遗产? ...

  9. P1800 software_NOI导刊2010提高(06)

    P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术 ...

最新文章

  1. 如何给女朋友解释为什么Java里面的String对象是不可变的?
  2. js学习笔记1---使用方法
  3. TAP/TUN Vnet veth
  4. 硬盘和显卡的访问与控制(一)——《x86汇编语言:从实模式到保护模式》读书笔记01
  5. Python的正则表达式和爬虫
  6. mysql对其他IP授权访问
  7. OpenCASCADE绘制测试线束:几何命令之展示
  8. 做产品:光有换位思考还不够
  9. ThinkPHP多次重复提交问题的根源
  10. XMLhttp学习应用
  11. Linux Shell脚本编程-语句控制
  12. php json schema,json-schema-php
  13. mysql jemalloc_MySQL性能测试--jemalloc内存管理
  14. matlab 中输入log就是ln吗?(ln就是log以e为底的对数)
  15. 从浏览器中获取headers
  16. CS231n课程笔记翻译:卷积神经网络笔记
  17. 作为人才我们为什么要和几个猎头保持良好的关系?
  18. Photoshop-选区的应用
  19. WebRTC 音视频同步分析
  20. 使用java的方式配置Spring---JavaConfig

热门文章

  1. 学堂在线计算机网络工程实践答案,计算机网络实验(本科生2017年春)
  2. python3打包app_python3打包脚本
  3. android 链式结构,Android 架构师之路10 设计模式之责任链模式
  4. python不同颜色散点图_Python+matplotlib绘制不同大小和颜色散点图实例
  5. 芜湖机器人餐厅地址_自助餐哪家强?得看谁让你扶墙... 芜湖8家自助餐厅超强攻略来了...
  6. struts的action访问servlet的IOC方式与非IOC方式
  7. JavaScript基础-基本数据类型和基本流程控制
  8. 洛谷P2770 航空路线问题(费用流)
  9. 2017北京国庆刷题Day2 afternoon
  10. 使用tmpfs的好处