#include <iostream>
#include <optional>
#include <vector>
enum color {
YELLOW = 1,
BLUE = 2,
RED = 3,
};
int main() {
int32_t n, m;
std::cin >> n >> m;
std::vector<std::optional<int32_t>> y(n);
std::vector<std::optional<int32_t>> b(n);
std::vector<std::optional<int32_t>> r(n);
for (int32_t i = 0; i < m; ++i) {
int32_t li, ri, ki;
std::cin >> li >> ri >> ki;
switch (color(ki)) {
case YELLOW:
if (!y[li - 1] || *y[li - 1] < ri - 1)
y[li - 1] = std::make_optional(ri - 1);
break;
case BLUE:
if (!b[li - 1] || *b[li - 1] < ri - 1)
b[li - 1] = std::make_optional(ri - 1);
break;
case RED:
if (!r[li - 1] || *r[li - 1] < ri - 1)
r[li - 1] = std::make_optional(ri - 1);
break;
}
}
std::optional<int32_t> yst;
std::optional<int32_t> bst;
std::optional<int32_t> rst;
int32_t score = 0;
for (int32_t i = 0; i < n; ++i) {
if (y[i] && (!yst || *yst < *y[i]))
yst = y[i];
if (b[i] && (!bst || *bst < *b[i]))
bst = b[i];
if (r[i] && (!rst || *rst < *r[i]))
rst = r[i];
if (*yst < i)
yst = std::nullopt;
if (*bst < i)
bst = std::nullopt;
if (*rst < i)
rst = std::nullopt;
if (yst && bst && !rst)
score += 1;
}
std::cout << score << "\n";
}
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 | #include <iostream> #include <optional> #include <vector> enum color { YELLOW = 1, BLUE = 2, RED = 3, }; int main() { int32_t n, m; std::cin >> n >> m; std::vector<std::optional<int32_t>> y(n); std::vector<std::optional<int32_t>> b(n); std::vector<std::optional<int32_t>> r(n); for (int32_t i = 0; i < m; ++i) { int32_t li, ri, ki; std::cin >> li >> ri >> ki; switch (color(ki)) { case YELLOW: if (!y[li - 1] || *y[li - 1] < ri - 1) y[li - 1] = std::make_optional(ri - 1); break; case BLUE: if (!b[li - 1] || *b[li - 1] < ri - 1) b[li - 1] = std::make_optional(ri - 1); break; case RED: if (!r[li - 1] || *r[li - 1] < ri - 1) r[li - 1] = std::make_optional(ri - 1); break; } } std::optional<int32_t> yst; std::optional<int32_t> bst; std::optional<int32_t> rst; int32_t score = 0; for (int32_t i = 0; i < n; ++i) { if (y[i] && (!yst || *yst < *y[i])) yst = y[i]; if (b[i] && (!bst || *bst < *b[i])) bst = b[i]; if (r[i] && (!rst || *rst < *r[i])) rst = r[i]; if (*yst < i) yst = std::nullopt; if (*bst < i) bst = std::nullopt; if (*rst < i) rst = std::nullopt; if (yst && bst && !rst) score += 1; } std::cout << score << "\n"; } |
English