#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; }
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; } |