P1047 校门外的树

题目描述

某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

输入输出格式

输入格式:

输入文件tree.in的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

输出格式:

输出文件tree.out包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。

输入输出样例

输入样例#1:

500 3
150 300
100 200
470 471
输出样例#1:

298

说明

NOIP2005普及组第二题

对于20%的数据,区域之间没有重合的部分;

对于其它的数据,区域之间有重合的情况。

思路:

  1)模拟!

    数据范围辣么小!!!直接开个布尔数组记录一下是不是被砍了不就行咯?最后从头到尾扫一遍,没被砍就ans++,最后输出ans,完啦~

  2)线段树!

    其实我是很惊讶的!这么个模拟就能够水过去的题还可以用线段树做,代码虽然也不长,但是比模拟要长上好多QwQ

    但是我还是作死的写了.Orz.

代码酱来也~

#include <iostream>
#include <cstdio>
#include <cmath> using namespace std; const int M = 1e4 + ;///范围QwQ
int Ls,m,ans;
bool kan[M];///记录是否被砍掉 int main()
{
scanf("%d%d",&Ls,&m);
int l,r;
for(int i=;i<m;i++)
{
scanf("%d%d",&l,&r);
if(l>r) swap(l,r);///闲得慌hhh
for(int j=l;j<=r;j++)
{
if(!kan[j]) kan[j]=;///砍啦~~~
}
}
for(int i=;i<=Ls;i++)
if(!kan[i]) ans++;
printf("%d",ans);
return ;
}

模拟

#include <iostream>
#include <cstdio>
///方便快捷的写代码~
#define lez k<<1
#define rez k<<1|1
#define mid ((l+r)>>1) using namespace std; const int M = 1e4 + ;
int Ls,Ms;
int lefts,rights; struct Trees{
int l,r;
int now;///当前有多少棵没被砍掉的树
}t[M*];///!!!要开四倍空间 inline void build(int k,int ld,int rd)
{///建树过程
t[k].l=ld,t[k].r=rd;///赋值
if(ld==rd)
{
t[k].now=;///递归到叶子节点
return ;
}
int m = (ld+rd) >> ;///中间节点
build(lez,ld,m);///建左子树
build(rez,m+,rd);///右子树
t[k].now=t[lez].now+t[rez].now;///更新棵数
} inline void change(int l,int r,int k)
{///更新线段树,以及我们更新要建火车站的范围
l=t[k].l,r=t[k].r;
///如果当前递归到的是超出需要修改的范围的(或者该地已经没有树咯),就跳出
if(l>rights || r<lefts || t[k].now == ) return ;
///如果刚好在范围之内
if(lefts<=l && rights>=r)
{
t[k].now=;///进行修改
return ;
}
change(l,mid,lez);///更新左子树
change(mid+,r,rez);///右子树
t[k].now=t[lez].now+t[rez].now;///必须更新棵数!!!
} int main()
{
scanf("%d%d",&Ls,&Ms);
Ls++;///因为题目中的是从0开始的,所以要多加一个
build(,,Ls);
for(int i=;i<=Ms;i++)///类似于Ms次修改询问???
{
scanf("%d%d",&lefts,&rights);///左右端点
lefts++;rights++;
change(,Ls,);
}
printf("%d",t[].now);///最后直接输出第一个根节点的棵树,不就行了咩?
return ;
}
///End.

线段树

End.

luogu P1047 校门外的树 x的更多相关文章

  1. luogu P1047 校门外的树

    题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种 ...

  2. P1047 校门外的树

    P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...

  3. 洛谷P1047 校门外的树

    P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...

  4. 洛谷——P1047 校门外的树

    P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...

  5. Luogu P1276 校门外的树(增强版)

    Luogu P1276 校门外的树(增强版) 本来看着是道普及-,就不打算写博客了,结果因为出了3次错,调试了15min就还是决定写一下-- 本题坑点: 1.每个位置有三种情况:空穴,树苗,树(而不只 ...

  6. 【洛谷】【线段树】P1047 校门外的树

    [题目描述:] 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L ...

  7. [模拟]P1047 校门外的树

    校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,- ...

  8. 洛谷 P1047 校门外的树(待完善)

    链接:https://www.luogu.org/problemnew/show/P1047 题目: 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是11米.我们可以把马路看 ...

  9. 洛谷题解P1047 校门外的树

    题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,…,L,都种有 ...

随机推荐

  1. nginx windows安装基础

    nginx在 window上运行需要1.17.3以上. 官方文件https://nginx.org/en/docs/windows.html nginx启动: 1:进入安装目录,双击nginx.exe ...

  2. JPA 学习笔记

    eclipse 新建jpa项目 : 修改 persistence.xml 文件 创建 Customer 类:    column 名称和数据库名称对应则不用写 类写好后在 persistence.xm ...

  3. Log4Net使用详解(续)

    转:http://blog.csdn.net/zhoufoxcn/article/details/6029021 说明自从上次在2008年在博客上发表过有关log4net的用法介绍文章之后(网址:ht ...

  4. python基础-5.1几种常见的排序算法

    一.冒泡排序(BubbleSort) 步骤: 比较相邻的元素,如果第一个比第二个大,就交换他们两个. 循环一遍后,最大的数就“浮”到了列表最后的位置. 将剩下的数再次循环,直道所有的排序完成 def ...

  5. python列表-简单操作

    一.下标操作(下标只能是整数,不能是浮点值) 1.用下标取值 (1)取单个值 In [69]: list01 Out[69]: [2, 3, 4, 5, 'b', 'v', 'c', 666] In ...

  6. (转载)图解Java多态内存分配以及多态中成员方法的特点

    图解Java多态内存分配以及多态中成员方法的特点   图解Java多态内存分配以及多态中成员方法的特点   Person worker = new Worker(); 子类实例对象地址赋值给父类类型引 ...

  7. Appium+Python之批量执行测试用例

    思考:当存在多个脚本,每个脚本中有多条测试用例时,我们该如何批量执行呢?分析:首先创建2个测试用例脚本(.py文件),每个脚本有2条测试用例,然后批量执行全部测试用例 #Test_01.py # co ...

  8. 洛谷 - P2146 - 软件包管理器 - 重链剖分

    https://www.luogu.org/problem/P2146 继续重链剖分. 这里好像很好懂,每次安装软件就区间改值赋值整个路径是1,然后比较前后的sum值变化就可以了.事实上后一次的sum ...

  9. k3 cloud列表中出现很多空白

    解决办法:找到单据体:过滤面板默认隐藏打勾

  10. APP性能

    一.APP性能维度分析  APP类型众多,根据具体类型划分,性能指标的维度和优先级各不相同.视频类APP归属于娱乐游戏型的APP,因此性能测试维度优先级排序为:流畅度.crash.内存.流量.响应时长 ...