问题描述
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数 轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
  由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已 知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树 都移走后,马路上还有多少棵树。
输入格式
输入文件的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点 和终止点的坐标。
输出格式
输出文件包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
样例输入
500 3
150 300
100 200
470 471
样例输出
298
数据规模和约定
对于20%的数据,区域之间没有重合的部分;
  对于其它的数据,区域之间有重合的情况。
挺基础的一道线段树的题目,直接附上我的ac代码:
 1 #include<iostream>
 2 using namespace std;
 3 struct node{
 4     int l,r,w;
 5 }tree[50050];
 6 void create(int i,int left,int right){
 7     tree[i].l=left;tree[i].r=right;
 8     if(left==right){
 9         tree[i].w=1;
10         return;
11     }
12     int mid=(left+right)>>1;
13     create(i<<1,left,mid);
14     create((i<<1)|1,mid+1,right);
15     tree[i].w=tree[i<<1].w+tree[(i<<1)|1].w;
16 }
17 void update(int i,int left,int right){
18     if(tree[i].l==tree[i].r){
19         tree[i].w=0;return;
20     }
21     if(tree[i].l==left&&tree[i].r==right){
22         tree[i].w=0;return;
23     }
24     if(tree[i].w==0) return;
25     int mid=(tree[i].l+tree[i].r)>>1;
26     if(right<=mid){
27         update(i<<1,left,right);
28     }else if(left>mid){
29         update((i<<1)|1,left,right);
30     }else{
31         update(i<<1,left,mid);
32         update((i<<1)|1,mid+1,right);
33     }
34     tree[i].w=tree[i<<1].w+tree[(i<<1)|1].w;
35 }
36 int find(int i,int left,int right){
37     if(tree[i].w==0)return 0;
38     if(left==right) return 1;
39     if(tree[i].l==left&&tree[i].r==right){
40         return tree[i].w;
41     }
42     int mid=(tree[i].l+tree[i].r)>>1;
43     if(right<=mid){
44         return find(i<<1,left,right);
45     }else if(left>mid){
46         return find((i<<1)|1,left,right);
47     }else{
48         return find(i<<1,left,mid)+find((i<<1)|1,mid+1,right);
49     }
50 }
51 int main(){
52     int L,M,le,ri;
53     cin>>L>>M;
54     create(1,0,L);
55     while(M--){
56         cin>>le>>ri;
57         update(1,le,ri);
58     }
59     cout<<find(1,0,L)<<endl;
60     return 0;
61 }

转载于:https://www.cnblogs.com/yifan2016/p/5273050.html

蓝桥杯 校门外面的树 (线段树,区间处理)相关推荐

  1. ( 题解 )第六届蓝桥杯决赛试题 -- 完美正方形 (线段树 + 深搜)

    题目 : 完美正方形 如果一些边长互不相同的正方形,可以恰好拼出一个更大的正方形,则称其为完美正方形. 历史上,人们花了很久才找到了若干完美正方形.比如:如下边长的22个正方形 2 3 4 6 7 8 ...

  2. 树套树-线段树套平衡树

    作用 线段树的作用是区间修改和查询,平衡树的作用是查询第k大,k的排名,前驱,后继.这两个结合起来,就变成了可以区间修改和查询第k大,k的排名,前驱,后继的数据结构:树套树-线段树套平衡树. 实现 先 ...

  3. bzoj 1984: 月下“毛景树” 线段树+树链剖分

    题意 给出一棵n个节点的树,每条边都有权值,要求资瓷以下操作: Max x y表示查询x到y之间的最大权值 Cover x y z表示把x到y的权值赋为z Change x y表示把第x条边的权值变成 ...

  4. 线段树 ---- 线段树上区间二分 或者单点二分 codeforces C. Greedy Shopping

    题目大意 题目大意: 给你一个非增的区间现在你有两次操作 1 x y : 把[a1,...ax][a_1,...a_x][a1​,...ax​]里面的数对yyy取maxmaxmax 2 x y : 你 ...

  5. 线段树 ---- 线段树维护线段相加+滑动变长窗口 2021牛客多校第7场 F xay loves trees

    题目大意: 给你两个大小相同的树但是形状不一定一样 叫你选出最大的子集,满足下面两个条件 在第一颗树上是一条链 在第二颗树上任意两个点都不是祖先关系 解题思路: 首先我们现在第二颗树上面把每个点的df ...

  6. BZOJ 3685: 普通van Emde Boas树( 线段树 )

    建颗权值线段树就行了...连离散化都不用... 没加读入优化就TLE, 加了就A掉了...而且还快了接近1/4.... ---------------------------------------- ...

  7. 2021CCPC(桂林) - Suffix Automaton(后缀树+线段树)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,再给出 qqq 次询问,每次询问需要输出本质不同第 kkk 小的子串的起止位置.如果有多个答案,输出起点最小的那个. 本题规定字符串大小 ...

  8. 牛客 - sequence(笛卡尔树+线段树)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a 和数列 b ,求 题目分析:不算难的题目,对于每个 a[ i ] 求一下贡献然后维护最大值就好,具体思路就是,先找出每个 a[ i ] 左 ...

  9. HDU - 4417 Super Mario(主席树/线段树+离线)

    题目链接:点击查看 题目大意:给出由 n 个数的数列,再给出 m 次查询,每次查询需要输出 [ l , r ] 内小于等于 h 的数有多少个 题目分析:大晚上睡不着觉随便做做题,发现这个题目原来可以用 ...

最新文章

  1. 0pp0r11如何更改语言_更改电脑日期的方法
  2. 什么是 CAS 机制?
  3. 归并排序改良 java_Java 八种排序算法总结
  4. 【CentOS】如何在线安装pcre?
  5. 四 s5p4418 Android 对can总线的支持 支持波特率修改
  6. python echo off_生活中的python-随机分配单词输出至word
  7. c检程序的公共语言运行时简称为,公共语言运行时检测到无效的程序
  8. 科沃斯扫地机器人阿尔法_科沃斯(Ecovacs)阿尔法地宝简单开箱
  9. 编程算法基础-一刀切法
  10. Qt Style Sheets Reference Qt css 样式属性列表[官版]
  11. 【爬虫】花瓣采集下载器
  12. 解决其他浏览器能上网谷歌浏览器不能上网
  13. 有哪些常用的搜索引擎指令?
  14. android 高仿拼多多,Android 仿京东、拼多多商品分类页
  15. java基础猜拳游戏
  16. MATLAB3 二维和三维图像的绘制
  17. 基于SSM企业留言系统
  18. 精益生产25个必备工具!
  19. 高通平台msm8916修改开机logo【原创】
  20. 让线程按顺序执行 8 种方法

热门文章

  1. 炫酷,SpringBoot+Echarts实现用户访问地图可视化(附源码)
  2. 网络常见的 9 大命令,非常实用!
  3. 人工神经网络背后的数学原理!
  4. MySQL环境配置和入门讲解!
  5. 教程 | 算法太多挑花眼?教你如何选择正确的机器学习算法
  6. 两位院士同时受聘,山东大学再添强援
  7. CVPR Oral:我给大家表演一个无中生有|北航商汤耶鲁
  8. 中国最大AI预训练模型发布:113亿参数!北京智源研究院、阿里、清华等联手打造...
  9. 机器人替代研究员,工作007,完成688次实验,登上Nature封面
  10. 清华理工男,跳了7年舞,来华为一年当了PL,这什么小哥哥