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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <vector>

using namespace std;

int main() {

    vector<int> czy_czerwony;
    vector<int> czy_zolty;
    vector<int> czy_niebieski;

    int kolor;
    int puszki, operacje, lewy, prawy;
    cin >> puszki >> operacje;
    int liczba_zielonych = 0;

    for (int i = 0; i < puszki; i++) {
        czy_czerwony.push_back(0);
        czy_zolty.push_back(0);
        czy_niebieski.push_back(0);
    }

    for (int i = 0; i < operacje; i++) {
        cin >> lewy >> prawy >> kolor;
        if (kolor == 3) {
            if (czy_czerwony[lewy-1] < prawy - lewy + 1)
                czy_czerwony[lewy-1] = prawy - lewy + 1;
        }
        else if (kolor == 1) {
            if (czy_zolty[lewy-1] < prawy - lewy + 1)
                czy_zolty[lewy-1] = prawy - lewy + 1;
        }
        else {
            if (czy_niebieski[lewy-1] < prawy - lewy + 1)
                czy_niebieski[lewy-1] = prawy - lewy + 1;
        }
    }

    int niebieski_gotowy = 0, zolty_gotowy = 0, czerwony_gotowy = 0;
    for (int i = 0; i < puszki; i++) {
        if (czy_czerwony[i] != 0) {
            if (czy_czerwony[i] > czerwony_gotowy)
                czerwony_gotowy = czy_czerwony[i]; 
        }

        if (czy_niebieski[i] != 0) {
            if (czy_niebieski[i] > niebieski_gotowy)
                niebieski_gotowy = czy_niebieski[i];          
        }

        if (czy_zolty[i] != 0) {
            if (czy_zolty[i] > zolty_gotowy)
                zolty_gotowy = czy_zolty[i];
        }
        
        if (zolty_gotowy > 0 && niebieski_gotowy > 0 && czerwony_gotowy == 0) {
            liczba_zielonych++;
        }

        //cout << " niebieski gotowy= " << niebieski_gotowy << " zolty_gotowy = " 
        //<< zolty_gotowy << " czerwony gotowy= " << czerwony_gotowy << " liczba_zielonych = " << liczba_zielonych << endl;

        if (zolty_gotowy != 0)
            zolty_gotowy--;
        if (niebieski_gotowy != 0)
            niebieski_gotowy--;
        if (czerwony_gotowy != 0)
            czerwony_gotowy--;
    }

    cout << liczba_zielonych;

    return 0;
}