#pragma GCC optimize("O3") #include <bits/stdc++.h> int32_t main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL); int cans_number; std::cin >> cans_number; int operations_number; std::cin >> operations_number; std::vector <std::pair <int, int>> begins; std::vector <std::pair <int, int>> ends; for (int i = 0; i < operations_number; ++i) { int left, right, color; std::cin >> left >> right >> color; begins.push_back({left, color}); ends.push_back({right, color}); } int yellow_segment = 0; int blue_segment = 0; int red_segment = 0; std::sort(begins.begin(), begins.end()); std::sort(ends.begin(), ends.end()); int beg_index = 0; int end_index = 0; int result = 0; for (int i = 1; i <= cans_number; ++i) { while (begins[beg_index].first == i && beg_index < operations_number) { if (begins[beg_index].second == 1) ++yellow_segment; if (begins[beg_index].second == 2) ++blue_segment; if (begins[beg_index].second == 3) ++red_segment; ++beg_index; } if (yellow_segment && blue_segment && !red_segment) ++result; while (ends[end_index].first == i && end_index < operations_number) { if (ends[end_index].second == 1) --yellow_segment; if (ends[end_index].second == 2) --blue_segment; if (ends[end_index].second == 3) --red_segment; ++end_index; } } std::cout << result << '\n'; 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 | #pragma GCC optimize("O3") #include <bits/stdc++.h> int32_t main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL); int cans_number; std::cin >> cans_number; int operations_number; std::cin >> operations_number; std::vector <std::pair <int, int>> begins; std::vector <std::pair <int, int>> ends; for (int i = 0; i < operations_number; ++i) { int left, right, color; std::cin >> left >> right >> color; begins.push_back({left, color}); ends.push_back({right, color}); } int yellow_segment = 0; int blue_segment = 0; int red_segment = 0; std::sort(begins.begin(), begins.end()); std::sort(ends.begin(), ends.end()); int beg_index = 0; int end_index = 0; int result = 0; for (int i = 1; i <= cans_number; ++i) { while (begins[beg_index].first == i && beg_index < operations_number) { if (begins[beg_index].second == 1) ++yellow_segment; if (begins[beg_index].second == 2) ++blue_segment; if (begins[beg_index].second == 3) ++red_segment; ++beg_index; } if (yellow_segment && blue_segment && !red_segment) ++result; while (ends[end_index].first == i && end_index < operations_number) { if (ends[end_index].second == 1) --yellow_segment; if (ends[end_index].second == 2) --blue_segment; if (ends[end_index].second == 3) --red_segment; ++end_index; } } std::cout << result << '\n'; return 0; } |