时间限制: 2 Sec 内存限制: 128 MB
题目描述
巨神 Ctt 被阿拉丁与神灯的故事吸引。于是,他马上去了神灯所在的山洞。Ctt 在山洞中苦苦寻找,终于找到神灯的藏身之处,他马上将神灯从玛瑙高台上取下。在那瞬间,神灯起了反应,周围的灯火全亮了。Ctt 仔细打量,发现这里是一个很大洞穴,洞穴周围有n座木门 Ctt 按照阿拉丁的步骤,轻轻擦拭神灯,洞穴周围的木门悄然打开,门后的洞穴中都是挤满洞穴的钻石。Ctt 正准备把钻石从门后的洞穴全部抱出,却听见神灯中似乎在说话:“贪婪的人没有好下场!” 后面跟着又说了m句话,第i句似乎是:“在第ai与bi座之间 (包括第ai与bi座) 的木门后的洞穴中最多只能抱出di颗钻石,否则你就会葬身于此地。”Ctt 想要知道他最多能取出多少颗钻石,但他觉得这对他来说太简单了,于是他毫不犹豫交给你,让你计算。
输入
第一行两个正整数n,m。
下面共m行,第i+1行有三个数ai,bi,di。
输出
仅一行输出一个整数表示最多取出的钻石总数。若能取出的钻石有无数多颗,则输出NO。
样例输入 Copy
【样例1】
4 3
1 3 4
2 4 5
4 4 1
【样例2】
2 2
1 1 3
2 2 5
【样例3】
4 3
1 1 2
1 2 3
4 4 3
样例输出 Copy
【样例1】
5
【样例2】
8
【样例3】
NO
提示
样例2解释:
1~3的山洞中最多可以取4个
2~4的山洞中最多可以取5个
4~4的山洞中最多可以取1个
取(1,1,2,1)为一种方案
![神灯 (lamp)(BIT+优先队列)_第1张图片](http://img.e-com-net.com/image/info8/693ba8e80d774464a3953a939ad47250.jpg)
1.先根据差分判断NO的情况
2.将m个区间根据左端点排序
3.遍历每一个点i,将区间的左端点小于等于i的区间加入优先队列,
弹出优先队列中右区间小于i的区间,同时判断区间中已经放的钻石是否满足条件,
不满足更新答案和BIT,弹出优先队列top,获取此区间已放的钻石,得到i能放钻石数,
更新BIT,更新答案,更新top区间,压入队列
注意判断是否满足条件时,多余的应该从靠右的区间中的端点删
/**/
#include
#include
#include
#include
#include
#include
#include