#include <cstdio> #include <utility> #include <algorithm> using edge = std::pair<int, int>; edge edges[2000000]; int main() { int n, m; scanf("%d%d", &n, &m); for (int i = 0; i < 2*m; i += 2) { int l, r, c; scanf("%d%d%d", &l, &r, &c); edges[i].first = l; edges[i+1].first = r+1; edges[i].second = c; edges[i+1].second = -c; } std::sort(edges, edges+2*m); int start_green = 0; int state = 0; int green = (1 << 1) | (1 << 2); int suma = 0; for (int iiii = 0; iiii < 2*m; iiii++) { int i = edges[iiii].first; int op = edges[iiii].second; int new_state = state; if (op > 0) new_state |= 1 << op; else new_state &= ~(1 << (-op)); if (state == green && new_state != green) suma += i - start_green; else if (state != green && new_state == green) start_green = i; state = new_state; } printf("%d\n", suma); 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 | #include <cstdio> #include <utility> #include <algorithm> using edge = std::pair<int, int>; edge edges[2000000]; int main() { int n, m; scanf("%d%d", &n, &m); for (int i = 0; i < 2*m; i += 2) { int l, r, c; scanf("%d%d%d", &l, &r, &c); edges[i].first = l; edges[i+1].first = r+1; edges[i].second = c; edges[i+1].second = -c; } std::sort(edges, edges+2*m); int start_green = 0; int state = 0; int green = (1 << 1) | (1 << 2); int suma = 0; for (int iiii = 0; iiii < 2*m; iiii++) { int i = edges[iiii].first; int op = edges[iiii].second; int new_state = state; if (op > 0) new_state |= 1 << op; else new_state &= ~(1 << (-op)); if (state == green && new_state != green) suma += i - start_green; else if (state != green && new_state == green) start_green = i; state = new_state; } printf("%d\n", suma); return 0; } |