移动
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

牛牛被困在了一个房间里,他可以看到房间的出口,但是想要到达出口,需要经过 n 道闸门。我们可以根据这些闸门离牛牛的距离进行编号,离牛牛最近的闸门记为 1 号闸门,离牛牛最远的记为 n 号闸门。

牛牛每秒都可以选择前进到下一闸门,后退到上一闸门,或者原地不动。(从起点到第一道闸门,从第 n 道闸门到出口的时间也是一秒)

这些闸门在一些时刻是关闭的,无法通行,剩下的时刻是开启的,可以通行。

注意:如果牛牛所在的位置有一个闸门即将关闭,他在此时选择原地不动,就会被闸门夹到,变成牛排。牛牛想在不变成牛排的前提下走到出口,他想知道最短需要多少秒才能走到出口,如果他永远无法走到出口,输出 -1。
在每一秒内,首先牛牛进行移动,然后闸门进行开/关的动作。

输入描述:

第一行给出 N,M,分别代表有 N 道闸门,M 个信息

接下来有 M 行,每行代表一个闸门关闭的信息,包含三个数字 a b c,代表第 a 道闸门会在 [b,c] 的时间内关闭
保证这些信息之间不相交。(即不会有某一道闸门在 的时间关闭,且

输出描述:

输出一行一个整数代表牛牛到达出口所需要的最短时间
示例1

输入

复制
4 2
1 2 50
3 2 5

输出

复制
8

说明

牛牛在 1 秒时到达 1 号闸门,2 秒时到达 2 号闸门,等到 6 秒时到达 3 号闸门, 7 秒到达 4 号闸门,8 秒到达出口
示例2

输入

复制
4 3
1 1 2
2 3 4
3 5 6

输出

复制
9

说明

2 秒时 1 号门打开,然后牛牛在 3 秒时走到位置 1,等到 4 秒时 2 号门打开,牛牛在第 5 秒走到位置 2,然后等到 7 秒时走到位置 3,8 秒走到位置 4, 9 秒走到出口。

备注:

25% 的数据,满足

45% 的数据,满足 

100% 的数据,满足