func_code_string: #include <bits/stdc++.h>   using namespace std;   long long POW(long long a, long long b) {     if (b == 0) return 1;     if (b == 1) return a;     if (b & 1) return (a * POW(a, b - 1)) % 1000000007;     long long t = POW(a, b / 2);     return (t * t) % 1000000007;   }   long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }   int dx[] = {0, -1, 1, 0}, dy[] = {1, 0, 0, -1};   int ddx[] = {0, 0, 1, 1, 1, -1, -1, -1}, ddy[] = {1, -1, 1, 0, -1, 1, 0, -1};   map<int, int> M;   map<int, int>::iterator it, it2;   int main() {     int n, q;     scanf( %d%d , &n, &q);     M[0] = 0;     M[1000000007] = 1000000007;     M[1] = n;     int ans = n;     while (q--) {       int l, r, k;       scanf( %d%d%d , &l, &r, &k);       if (k == 1) {         it = M.upper_bound(r);         it--;         while (it != M.begin()) {           it2 = it;           it--;           int L = it2->first, R = it2->second;           if (l <= R) {             M.erase(it2);             ans -= R - L + 1;           }           if (L <= r && R > r) {             M[r + 1] = R;             ans += R - r;           }           if (L < l && R >= l) {             M[L] = l - 1;             ans += l - L;           }           if (L <= l) break;         }       } else {         it = M.upper_bound(r);         it--;         int L = 1000000007, R = -1;         while (it != M.begin()) {           it2 = it;           it--;           if (it2->second < l) break;           L = min(L, it2->first), R = max(R, it2->second);           ans -= it2->second - it2->first + 1;           M.erase(it2);         }         M[min(l, L)] = max(r, R);         ans += max(r, R) - min(l, L) + 1;       }       printf( %d n , ans);     }   }   