博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
九度OJ 1088:剩下的树 (线段树)
阅读量:5155 次
发布时间:2019-06-13

本文共 1681 字,大约阅读时间需要 5 分钟。

时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:5791

解决:2649

题目描述:

    有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,...,L共L+1个位置上有L+1棵树。

    现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。
    可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。

输入:

    两个整数L(1<=L<=10000)和M(1<=M<=100)。

    接下来有M组整数,每组有一对数字。

输出:

    可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的个数。

样例输入:
500 3100 200150 300470 471
样例输出:
298
来源:

思路:

我写代码1的时候还不知道线段树的概念,用了一种比较笨的方法,每次对区间内所有数赋值操作。这个题时间复杂度要求不高,能通过。

后来学了一下线段树,用线段树实现的,见代码2。很奇怪的是线段树的时间复杂度并没有显著改善

代码1:

#include 
#include
#define N 10000 int main(void){ int L, M; int moved[N+1]; int i, j; int begin, end; while (scanf("%d%d", &L, &M) != EOF) { memset(moved, 0, (N+1)*sizeof(int)); for (i=0; i

代码2:

#include 
#include
#define N 10001 int seg[4*N]; void pushdown(int i){ if (seg[i] != -1) { seg[2*i] = seg[i]; seg[2*i+1] = seg[i]; seg[i] = -1; }} void update(int k, int i, int b, int e, int l, int r){ if (b > r || e < l) return; if (l <= b && e <= r) { seg[i] = k; return; } pushdown(i); update(k, 2*i, b, (b+e)/2, l, r); update(k, 2*i+1, (b+e)/2+1, e, l, r);} int getsum(int i, int b, int e){ if (seg[i] == -1) return getsum(2*i, b, (b+e)/2) + getsum(2*i+1, (b+e)/2+1, e); if (seg[i] == 1) return e-b+1; else return 0;} int main(void){ int n, i, m; int l, r; while (scanf("%d%d", &n, &m) != EOF) { for (i=0; i<4*N; i++) seg[i] = -1; update(1, 1, 0, n, 0, n); for (i=0; i

转载于:https://www.cnblogs.com/liangrx06/p/5083944.html

你可能感兴趣的文章
.NET CLR基本术语
查看>>
Java Development Environment in Linux: Install and Configure Oracle
查看>>
fidder使用
查看>>
C - Heavy Transportation
查看>>
ubuntu的home目录下,Desktop等目录消失不见
查看>>
建立,查询二叉树 hdu 5444
查看>>
[Spring框架]Spring 事务管理基础入门总结.
查看>>
2017.3.24上午
查看>>
Python-常用模块及简单的案列
查看>>
(VC/MFC)多线程(Multi-Threading) -1. 基本概念.
查看>>
快数据时代下,Moka携手DataPipeline提升招聘效能
查看>>
day1 用户登陆三次机会
查看>>
LeetCode 159. Longest Substring with At Most Two Distinct Characters
查看>>
LeetCode Ones and Zeroes
查看>>
基本算法概论
查看>>
jquery动态移除/增加onclick属性详解
查看>>
第九周作业
查看>>
MiniMagick
查看>>
css important
查看>>
KindEditor图片上传到七牛云
查看>>