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
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n{}, m{};
    cin >> n >> m;

    vector<pair<int, int>> farby[3]{};
    
    for (int i = 0; i < m; i++)
    {
        int l{}, r{}, k{};
        cin >> l >> r >> k;
        l--; r--; k--;
        farby[k].push_back(make_pair(l, r));
    }

    sort(farby[0].begin(), farby[0].end());
    sort(farby[1].begin(), farby[1].end());
    sort(farby[2].begin(), farby[2].end());

    bool puszki[3][1000001];
    for (int i = 0; i < 3; i++)
    {
        int index{};
        for (auto przedzial : farby[i])
        {
            for (int j = max(index, przedzial.first); j <= przedzial.second; j++)
            {
                puszki[i][j] = true;
            }
            index = max(index, przedzial.second + 1);
        }

    }
    
    int odp{};
    for (int i = 0; i < n; i++)
    {
        if (puszki[0][i] == true && puszki[1][i] == true && puszki[2][i] == false) odp++;
    }
    cout << odp;
}