博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1556 Color the ball (线段树+代码详解)
阅读量:6654 次
发布时间:2019-06-25

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

Color the ball

Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 18696    Accepted Submission(s): 9328

Problem Description
N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?
 

Input
每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。
当N = 0,输入结束。
 

Output
每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。
 

Sample Input
 
3 1 1 2 2 3 3 3 1 1 1 2 1 3 0
 

Sample Output
 
1 1 1 3 2 1
 

一开始写这个题的时候我是用了线段树,但是a了之后看其他大牛的博客,发现了另一种思路,并且时间空间都要比线段树少很多,那么现在就来归纳一下这两种方法。

方法1:

#include
struct data{ int l,r,v;}line[400005];void bulid (int l,int r,int x) //构建二叉树; { line[x].l=l; line[x].r=r; line[x].v=0; //这里需要讲所有节点标记为零; if(l==r){ return ; } int m=(r+l)/2; bulid(l,m,x*2); bulid(m+1,r,x*2+1);}void updata (int l, int r ,int x , int a , int b ) //更新二叉树; { if(l<=a&&b<=r){ //如果节点x在l和r区间范围之内,则这个区间标记的值加1; line[x].v++; return ; } int m=(a+b)/2; if(m
方法二:

#include
#include
int main (){ int line[100010]; int n,a,b,i,sum; while(scanf("%d",&n),n){ memset(line,0,sizeof(line)); for(i=0;i

转载于:https://www.cnblogs.com/lanaiwanqi/p/10445766.html

你可能感兴趣的文章
「转」 理解“统一编址与独立编址、I/O端口与I/O内存”
查看>>
jquery的异步获取返回值为中文时乱码解决方法
查看>>
Oracle in 引号连接的子查询用法
查看>>
安卓 调试笔记 不断更新
查看>>
PyPy 与 Python 的一个小 timeit (一)
查看>>
adb启动失败 , 查错: adb server version (32) doesn't match this client (39)
查看>>
项目管理-项目章程
查看>>
oral_quiz->#二叉树的境像#
查看>>
PHP正则表达式-实践1
查看>>
30个JDK类库源代码中最频繁出现的词的深度分析
查看>>
设置Tomcat环境变量
查看>>
在DDMS中访问data目录
查看>>
mac OSX中安装homebrew
查看>>
ASP.NET开源博客QBlog开发者视频教程:[皮肤]模板机制页面填充解说(五)
查看>>
小白接口(OkayApi.com),免开发,直接可用的云端数据接口
查看>>
spark和mapreduce在相同案例实现流程上的对比
查看>>
美颜代码
查看>>
Linux常用命令(三)文件/目录的打包和压缩
查看>>
NGINX 的安装及平滑升级
查看>>
ES6 对象的解构赋值
查看>>