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
#include <iostream>
#include <vector>
#include <algorithm>

struct Puszka {
	std::vector<int> barwniki; //0 bialy //1 zolty //2 niebieski //3 czerwony //4 zielony //5 pomaranczowy //6 fioletowy //7 brazowy

	void DolejBarwnik(int barwnik)
	{
		if (std::find(barwniki.begin(), barwniki.end(), barwnik) == barwniki.end()) //jak nie ma kororu
			barwniki.push_back(barwnik);
	}

	int Kolor()
	{
		std::sort(barwniki.begin(), barwniki.end());
		if (barwniki.size() == 1)
			return barwniki[0];
		
		if (barwniki.size() == 2)
		{
			if (barwniki[0] == 1) //zolty
			{
				if (barwniki[1] == 2) // niebieski
					return 4; //zielony
				
				return 3; //czerwony

			}

			return 6; //fioletowy
		}

		if (barwniki.size() == 3)
			return 7; // brazowy

		return 0; //bialy
	}
};

int main()
{
	int ilPuszek, lOperacji;
	std::cin >> ilPuszek >> lOperacji;
	std::vector<Puszka*> puszki;

	while (ilPuszek--)
		puszki.push_back(new Puszka());


	while (lOperacji--)
	{
		int lewo, prawo, barwnik;
		std::cin >> lewo >> prawo >> barwnik;

		std::vector<Puszka*> zakres(puszki.begin() + lewo, puszki.begin() + prawo + 1);
		for (auto puszunia : zakres)
			puszunia->DolejBarwnik(barwnik);
	}

	int ileZielonych = 0;
	for (auto puszunia : puszki)
		if (puszunia->Kolor() == 4)
			ileZielonych++;
			
	std::cout << ileZielonych;

	return 0;
}