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
75
76
77
78
79
80
81
82
83
84
85
86
87
#include<iostream>
#include<vector>
#include<utility>
#include<algorithm>
#include <functional>
using namespace std;
bool operator< (const pair<int,bool>& element1, const pair<int,bool>& element2)
{
	if (element1.first != element2.first)
		return element1.first < element2.first;
	else
		return element1.second < element2.second;
}
int main()
{
	int puszki;
	int a;
	int b;
	int kolor;
	int operacje;
	int zielone=0;
	int znacznik1=0;
	int znacznik2=0;
	int znacznik3=0;
	int roznica1=0;
	int roznica2=0;
	int roznica3=0;
	pair<int,bool>pomocniczy;
	vector<pair<int, bool>> pomocniczy2;
	vector<vector<pair<int,bool>>>kolory;
	for(int i =0;i<3;i++)
		kolory.push_back(pomocniczy2);
	cin >> puszki;
	cin >> operacje;
	for (int i = 0; i < operacje; i++)
	{
		cin >> a >> b >> kolor;
		pomocniczy = make_pair(a-1, 0);
		kolory[kolor-1].push_back(pomocniczy);
		pomocniczy = make_pair(b-1, 1);
		kolory[kolor-1].push_back(pomocniczy);
	}
	for(int i =0;i<3;i++)
		sort(kolory[i].begin(), kolory[i].end());
	pomocniczy = make_pair(puszki, 0);
	for (int i = 0; i < 3; i++)
		kolory[i].push_back(pomocniczy);
	for (int i = 0; i < puszki; i++)
	{
		while ((kolory[0][znacznik1].first == i)&& (kolory[0][znacznik1].second == 0))
		{
			roznica1++;
			znacznik1++;
		}
		while ((kolory[1][znacznik2].first == i) && (kolory[1][znacznik2].second == 0))
		{
			roznica2++;
			znacznik2++;
		}
		while ((kolory[2][znacznik3].first == i) && (kolory[2][znacznik3].second == 0))
		{
			roznica3++;
			znacznik3++;
		}

		if ((roznica1 > 0) && (roznica2 > 0) && (roznica3 == 0))
			zielone++;

		while ((kolory[0][znacznik1].first == i) && (kolory[0][znacznik1].second == 1))
		{
			roznica1--;
			znacznik1++;
		}
		while ((kolory[1][znacznik2].first == i) && (kolory[1][znacznik2].second == 1))
		{
			roznica2--;
			znacznik2++;
		}
		while ((kolory[2][znacznik3].first == i) && (kolory[2][znacznik3].second == 1))
		{
			roznica3--;
			znacznik3++;
		}
	}
	cout << zielone;
	return 0;
}