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