九度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 题目描述: 给定两个正整数,计 ...
随机推荐
- python作为计算器(数学用法)
1.基本的加减乘除与取余运算 >>> print(5+10) 15 >>> print(5-10) -5 >>> print(5*10) 50 & ...
- 理解webpack中的devTool的配置项
2.1. eval eval 会将每一个module模块,执行eval,执行后不会生成sourcemap文件,仅仅是在每一个模块后,增加sourceURL来关联模块处理前后对应的关系.在webpac ...
- CentOS配置sshd
用SSH来远程管理计算机,就不用到计算机实际地点来回跑了 环境:服务器:CentOS6.6,客户机win8.1 putty 配置服务器: 1.检查SSHD是否安装(默认情况下是系统自带的),使用命令 ...
- GitHub 上受欢迎的 Android UI Library 整理二
通知 https://github.com/Tapadoo/Alerter ★2528 - 克服Toast和Snackbar的限制https://github.com/wenmingvs/Notify ...
- DNS重绑定DNS Rebinding攻击
DNS重绑定DNS Rebinding攻击 在网页浏览过程中,用户在地址栏中输入包含域名的网址.浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户.而对于域名所有 ...
- es6系列-变量声明
es6系列所有文章都是阅读阮一峰老师的<ES6标准入门>(第2版)所做的读书笔记.方便日后查阅相关基础知识. git地址: https://github.com/rainnaZR/es6- ...
- JavaScript的变量:变量提升
JavaScript代码的运行规则 在JavaScript代码运行之前其实是有一个编译阶段的.编译之后才是从上到下,一行一行解释执行.这样一来也给初学者造成很大的误解.初学者会觉得JavaScript ...
- 织梦dedecms 去掉后台登陆验证码的方法
那么有什么办法解决呢? 那么现在就给大家解决织梦去掉后台登陆验证码. 这里面分两种版本 一个是织梦5.6的程序 那么织梦5.6程序的解决办法是: 在织梦DedeCms5.6版本可以通过下面路径对验 ...
- Build FTP Server on Windows
1. Use the self-ftp component service with windows control panel / program / start or close windows ...
- ionic 修改应用名称 、启动页出现黑白屏 及 修改百度离线地图 点聚合 图标
1.ionic 修改应用名称 2.启动页打开后会在图片消失会出现一小段黑屏的时间 解决方法: 首先,启动页的图片消失时间默认是在config.xml配置的 <preference name=&q ...