1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <cstdio>
#include <utility>
#include <algorithm>
using edge = std::pair<int, int>;
edge edges[2000000];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < 2*m; i += 2) {
    int l, r, c;
    scanf("%d%d%d", &l, &r, &c);
    edges[i].first = l;
    edges[i+1].first = r+1;
    edges[i].second = c;
    edges[i+1].second = -c;
  }
  std::sort(edges, edges+2*m);
  int start_green = 0;
  int state = 0;
  int green = (1 << 1) | (1 << 2);
  int suma = 0;
  for (int iiii = 0; iiii < 2*m; iiii++) {
    int i = edges[iiii].first;
    int op = edges[iiii].second;
    int new_state = state;
    if (op > 0)
      new_state |= 1 << op;
    else
      new_state &= ~(1 << (-op));
    if (state == green && new_state != green)
      suma += i - start_green;
    else if (state != green && new_state == green)
      start_green = i;
    state = new_state;
  }
  printf("%d\n", suma);
  return 0;
}