Problem:
Score : 100 points

Problem Statement

Consider a string of length N consisting of 0 and 1.
The score for the string is calculated as follows:

For each i (1 \leq i \leq M), a_i is added to the score if the string contains 1 at least once between the l_i-th and r_i-th characters (inclusive).

Find the maximum possible score of a string.

Constraints

All values in input are integers.

1 \leq N \leq 2 × 10^5

1 \leq M \leq 2 × 10^5

1 \leq l_i \leq r_i \leq N

|a_i| \leq 10^9

Input

Input is given from Standard Input in the following format:

N M
l_1 r_1 a_1
l_2 r_2 a_2
:
l_M r_M a_M

Output

Print the maximum possible score of a string.

Sample Input 1

5 3
1 3 10
2 4 -10
3 5 10

Sample Output 1

20

The score for 10001 is a_1 + a_3 = 10 + 10 = 20.

Sample Input 2

3 4
1 3 100
1 1 -10
2 2 -20
3 3 -30

Sample Output 2

90

The score for 100 is a_1 + a_2 = 100 + (-10) = 90.

Sample Input 3

1 1
1 1 -10

Sample Output 3

0

The score for 0 is 0.

Sample Input 4

1 5
1 1 1000000000
1 1 1000000000
1 1 1000000000
1 1 1000000000
1 1 1000000000

Sample Output 4

5000000000

The answer may not fit into a 32-bit integer type.

Sample Input 5

6 8
5 5 3
1 1 10
1 6 -8
3 6 5
3 4 9
5 5 -2
1 3 -6
4 6 -7

Sample Output 5

10

For example, the score for 101000 is a_2 + a_3 + a_4 + a_5 + a_7 = 10 + (-8) + 5 + 9 + (-6) = 10.

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;

int main(){
	int n,m;
	cin>>n>>m;
	int l[m], r[m];
	long long int a[m], dp[n+1][2], t1[n+1]={0}, sc[n+1] = {0}, t2[n+1] = {0}, comp= 0;
	for (int i=0;i<m;i++){
		cin>>l[i]>>r[i]>>a[i];
		t2[l[i]]+=a[i];
		if (r[i]<n){
			t2[r[i]+1]-=a[i];
		}
		t1[r[i]]+=a[i];
	}
	sc[0] = 0;
	for (int i=1;i<=n;i++){
		sc[i] = sc[i-1] + t2[i];
	}
	// for (int i=1;i<=n;i++){
	// 	cout<<sc[i]<<" ";
	// }
	dp[0][0] = 0;
	dp[0][1] = 0;
	for(int i=1;i<=n;i++){
		dp[i][0] = max(comp, t1[i]) + dp[i-1][0];
		dp[i][1] = max(dp[i-1][1], sc[i] + dp[i-1][0]);
	}
	cout<<dp[n][1];
}