九度OJ 1088:剩下的树 (线段树)
时间限制: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 3
100 200
150 300
470 471
- 样例输出:
-
298
思路:
我写代码1的时候还不知道线段树的概念,用了一种比较笨的方法,每次对区间内所有数赋值操作。这个题时间复杂度要求不高,能通过。
后来学了一下线段树,用线段树实现的,见代码2。很奇怪的是线段树的时间复杂度并没有显著改善
代码1:
#include <stdio.h>
#include <string.h> #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<M; i++)
{
scanf("%d%d", &begin, &end);
for (j=begin; j<=end; j++)
moved[j] = 1;
}
int count = 0;
for (j=0; j<=L; j++)
count += moved[j];
printf("%d\n", L+1-count);
} return 0;
}
/**************************************************************
Problem: 1088
User: liangrx06
Language: C
Result: Accepted
Time:50 ms
Memory:912 kb
****************************************************************/
代码2:
#include <stdio.h>
#include <limits.h> #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<m; i++)
{
scanf("%d%d", &l, &r);
update(0, 1, 0, n, l, r);
}
printf("%d\n", getsum(1, 0, n));
} return 0;
}
/**************************************************************
Problem: 1088
User: liangrx06
Language: C
Result: Accepted
Time:40 ms
Memory:1068 kb
****************************************************************/
九度OJ 1088:剩下的树 (线段树)的更多相关文章
- 【九度OJ】题目1201-二叉排序树
题目 建树过程是递归,"递归的思路不是很复杂",经过题目1078的训练,直接开始编码.提交及修改的过程告诉自己,这是一个错觉,对递归的理解还应该再进一步. 自己的实现 #inclu ...
- 九度OJ 1172:哈夫曼树 (贪心)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6701 解决:2954 题目描述: 哈夫曼树,第一行输入一个数n,表示叶结点的个数.需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结 ...
- 九度OJ 1090:路径打印 (树、DFS)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1704 解决:314 题目描述: 给你一串路径,譬如: a\b\c a\d\e b\cst d\ 你把这些路径中蕴含的目录结构给画出来,子目 ...
- 【九度OJ】题目1176:树查找 解题报告
[九度OJ]题目1176:树查找 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1176 题目描述: 有一棵树,输出某一深度的所有节点 ...
- 【九度OJ】题目1172:哈夫曼树 解题报告
[九度OJ]题目1172:哈夫曼树 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1172 题目描述: 哈夫曼树,第一行输入一个数n, ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 【九度OJ】题目1107:搬水果 解题报告
[九度OJ]题目1107:搬水果 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1107 题目描述: 在一个果园里,小明已经将所有的水 ...
- 【九度OJ】题目1185:特殊排序 解题报告
[九度OJ]题目1185:特殊排序 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1185 题目描述: 输入一系 ...
- 【九度OJ】题目1438:最小公倍数 解题报告
[九度OJ]题目1438:最小公倍数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1438 题目描述: 给定两个正整数,计 ...
随机推荐
- 如何在requirejs下引用bootstrap
原本以为只要require过来就能用 require(['jquery','underscore','bootstrap','cache'],function($,U,B,C){ 但发现会报错,类似未 ...
- Linux 之 LNMP服务器搭建-PHP
LNMP服务器搭建-PHP 参考教程:[千峰教育] 安装: (1)解压源码包 cd /lnmp/srctar -jxvf php-7.3.2.tar.bz2cd php-7.3.2 (2)配置选项 . ...
- 链表的排序 时间复杂度O(nlogn)
思路:用归并排序.对一个链表采用递归进行二等分,直到每个部分有序,然后对其进行合并.其实就是两步,先分解,然后合并有序链表. 代码: //对链表采用递归排序 class Solution { publ ...
- Maven插件maven-antrun-plugin的使用
以下引用官方的介绍http://maven.apache.org/plugins/maven-antrun-plugin/: 一.什么是maven-antrun-plugin? 该插件提供从Maven ...
- Generate C and C++ Header File
1. 2. 其中bootclasspath 后面的参数就是自己android.jar具体位置 location: ${system_path:javah} working Directoy: ${pr ...
- Android 蓝牙 笔记
安卓:短信复制机制 软件识别蓝牙 软件可以读取蓝牙的信息 给蓝牙弄上一个类似于短信的东西 并且存一个短信 然后发到客户端 客户端 可以分类 分成表格 形式 这样做的目的是为了 让你的设备可以写蓝牙给 ...
- 【java】RC4加密转16进制获取长度为40的不重复优惠码字符串 【未优化版本】
需求:需要一串给各机构独有的优惠码 间接需求:固定长度.不重复.没有规律可循 实现思想如下: 1.首先获取一个UUID 2.去除UUID中的“-” 3.小写转大写 4.获取一个固定长度字符串 5.按照 ...
- Excel导入的HDR=YES; IMEX=1详解
参数HDR的值:HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用.系统默认的是YES 参数Excel 8.0对于Excel 97以上版本都 ...
- ARC forbids Objective-C objects in structs or unions
解决方法有二种: 1.在出错的地方加入__unsafe_unretained 2.关闭系统ARC.1.点击project 2.点击Build Setting 3.找到其以下的Objetive ...
- Android 组件之Service解析
原创文章,转载请注明 http://blog.csdn.net/leejizhou/article/details/50866875 李济洲的博客 Service是Android四大组件之中的一个.S ...