校门外的树

 
  
 
校门外的树2
 
   

 

 

 

 

描述 Description

 

 

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

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

 

 

 

 

 

 

 

输入格式 Input Format

 

 

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

 

 

 

 

 

 

 

输出格式 Output Format

 

 

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

 

这道题话说是相当简单的,将区间合并,然后计算就可以了,但是如果题目条件改变一下就不一样了。

所以这道题可以用树状数组或者线段树来解决。

 

具体内容以后再写吧,最后总结一下我刷这道题的经历:

 

第一次是很久以前些的,用朴素的O(l)算法,

 

#01: Accepted (121ms, 98476KB)
#02: Accepted (137ms, 98476KB)
#03: Accepted (184ms, 98476KB)
#04: Time Limit Exceeded (?, 98476KB)
#05: Time Limit Exceeded (?, 98476KB)
#06: Time Limit Exceeded (?, 98476KB)
#07: Time Limit Exceeded (?, 98476KB)
#08: Time Limit Exceeded (?, 98476KB)
#09: Time Limit Exceeded (?, 98476KB)
#10: Time Limit Exceeded (?, 98476KB)

 

第二次写的线段树,用链表存的,当然超内存了。

 

#01: Accepted (0ms, 668KB)
#02: Accepted (168ms, 956KB)
#03: Accepted (184ms, 63456KB)
#04: Accepted (340ms, 126196KB)
#05: Memory Limit Exceeded (371ms, ?)
#06: Memory Limit Exceeded (371ms, ?)
#07: Memory Limit Exceeded (371ms, ?)
#08: Memory Limit Exceeded (371ms, ?)
#09: Memory Limit Exceeded (371ms, ?)
#10: Memory Limit Exceeded (356ms, ?)

第三次我改用数组,结果开大了,超内存:

#01: Memory Limit Exceeded (0ms, ?)
#02: Memory Limit Exceeded (0ms, ?)
#03: Memory Limit Exceeded (0ms, ?)
#04: Memory Limit Exceeded (0ms, ?)
#05: Memory Limit Exceeded (0ms, ?)
#06: Memory Limit Exceeded (0ms, ?)
#07: Memory Limit Exceeded (0ms, ?)
#08: Memory Limit Exceeded (0ms, ?)
#09: Memory Limit Exceeded (0ms, ?)
#10: Memory Limit Exceeded (0ms, ?)

第四次我索性将数组改小一点,于是runtime error:

#01: Accepted (0ms, 2292KB)
#02: Accepted (0ms, 2292KB)
#03: Runtime Error (0ms, 2292KB)
写入访问违规, 地址: 0x005c76a0
#04: Runtime Error (0ms, 2292KB)
写入访问违规, 地址: 0x005c76a0
#05: Runtime Error (0ms, 2292KB)
写入访问违规, 地址: 0x005c76a0
#06: Runtime Error (0ms, 2292KB)
写入访问违规, 地址: 0x005c76a0
#07: Runtime Error (0ms, 2292KB)
写入访问违规, 地址: 0x005c76a0
#08: Runtime Error (4ms, 2292KB)
写入访问违规, 地址: 0x005c76a0
#09: Runtime Error (4ms, 2292KB)
写入访问违规, 地址: 0x005c76a0
#10: Runtime Error (12ms, 2292KB)
写入访问违规, 地址: 0x005c76a0

第五次我将数组开到一百万,比上次扩大十倍,但结果一样:

#01: Accepted (0ms, 17264KB)
#02: Accepted (0ms, 17264KB)
#03: Runtime Error (0ms, 17264KB)
写入访问违规, 地址: 0x0146fdc0
#04: Runtime Error (0ms, 17264KB)
写入访问违规, 地址: 0x0146fdc0
#05: Runtime Error (0ms, 17264KB)
写入访问违规, 地址: 0x0146fdc0
#06: Runtime Error (0ms, 17264KB)
写入访问违规, 地址: 0x0146fdc0
#07: Runtime Error (0ms, 17264KB)
写入访问违规, 地址: 0x0146fdc0
#08: Runtime Error (0ms, 17264KB)
写入访问违规, 地址: 0x0146fdc0
#09: Runtime Error (0ms, 17264KB)
写入访问违规, 地址: 0x0146fdc0
#10: Runtime Error (0ms, 17264KB)
写入访问违规, 地址: 0x0146fdc0

第六次我讲究用区间合并,O(m+loc(m))算法,结果小错误不断:

#01: Wrong Answer (0ms, 640KB)
#02: Wrong Answer (0ms, 640KB)
#03: Wrong Answer (0ms, 640KB)
#04: Wrong Answer (0ms, 640KB)
#05: Wrong Answer (43ms, 640KB)
#06: Wrong Answer (59ms, 640KB)
#07: Runtime Error (0ms, 640KB)
执行访问违规, 地址: 0x033c4812
#08: Runtime Error (0ms, 640KB)
执行访问违规, 地址: 0x05c4b447
#09: Runtime Error (0ms, 640KB)
执行访问违规, 地址: 0x041fa2ce
#10: Runtime Error (0ms, 640KB)
执行访问违规, 地址: 0x035de5ca

 

最后检查才发现几个致命错误:

1.忘记删除调试代码

2.变量些反了

3.数组开的过小

4.没有看到题目是从0开始计数的。

加上我不愿意DEBUG,找到一项错误就盲目提交...

悲剧ing...

 

在第十次提交之后,终于AC

 

呃,艰难的AC历程啊。

 

这道题还不能画上句号,因为还有树状数组和线段树的方法没有AC...

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值