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
#include <iostream>
#include <list>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

using namespace std;

/*autor: Agnieszka Klich*/

int main(int argc, char** argv) {
	long long int liczbaDostaw;
	cin >> liczbaDostaw;
	int typ;
	long long int polozenie, czas;
	list <long long int> dostawaNaPolnoc;//typ 1
	list <long long int> dostawaNaWschod; // typ 2
	
	for (long long int i=0; i<liczbaDostaw; ++i){
		cin >> typ;
		cin >> polozenie;
		cin >> czas;
		if(typ==1)
			dostawaNaPolnoc.push_back(polozenie-czas);
		else
			dostawaNaWschod.push_back(polozenie-czas);
	}
	dostawaNaPolnoc.sort();
	dostawaNaWschod.sort();
	
	long long int wynik = 0, ileTakichSamych=0;
	
	list<long long int>::iterator itWschod = dostawaNaWschod.begin();
	list<long long int>::iterator itPolnoc = dostawaNaPolnoc.begin();
	do{
//		cout << *itPolnoc << " " << *itWschod << endl;
		if(*itPolnoc>*itWschod){
			itWschod++;
			wynik+=ileTakichSamych;
			ileTakichSamych = 0;
//			cout << "polnoc wieksza"<< endl;
		}
		else if (*itPolnoc<*itWschod){
			itPolnoc++;
			wynik+=ileTakichSamych;
			ileTakichSamych = 0;
//			cout << "wschod wiekszy"<< endl;
		}
		else{
			itPolnoc++;
			itWschod++;
			ileTakichSamych++;
//			cout << "rowne"<< endl;
		}
			
	} while(itPolnoc!=dostawaNaPolnoc.end() && itWschod!=dostawaNaWschod.end());
	wynik+=ileTakichSamych;
	
	cout << wynik << "\n";
	
	return 0;
}