#include <cstdio> #include <cstdlib> #include <algorithm> using namespace std; #define MAXE 2*1000000+10 struct e { int i; // index int s; // start = 1, end = -1; int k; // kolor } E[MAXE]; int N,M; int K[4]; int main() { scanf("%d%d", &N, &M); for (int i = 0; i < M; i++) { int l, r, k; scanf("%d%d%d", &l, &r, &k); E[2*i].i = l; E[2*i].s = 1; E[2*i].k = k; E[2*i+1].i = r+1; E[2*i+1].s = -1; E[2*i+1].k = k; } sort(E, E+2*M, [](struct e A, struct e B) { return A.i < B.i; }); // for (int i = 0; i < 2*M; i++) printf("A %d %d %d\n", E[i].i, E[i].s, E[i].k); int ret = 0, j = 0; for (int i = 1; i <= N; i++) { while (E[j].i == i && j < 2*M) { K[E[j].k] += E[j].s; j++; } // printf("B %d %d %d\n", K[1], K[2], K[3]); if (K[1] > 0 && K[2] > 0 && K[3] == 0) { ret++; } } printf("%d\n", ret); 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 | #include <cstdio> #include <cstdlib> #include <algorithm> using namespace std; #define MAXE 2*1000000+10 struct e { int i; // index int s; // start = 1, end = -1; int k; // kolor } E[MAXE]; int N,M; int K[4]; int main() { scanf("%d%d", &N, &M); for (int i = 0; i < M; i++) { int l, r, k; scanf("%d%d%d", &l, &r, &k); E[2*i].i = l; E[2*i].s = 1; E[2*i].k = k; E[2*i+1].i = r+1; E[2*i+1].s = -1; E[2*i+1].k = k; } sort(E, E+2*M, [](struct e A, struct e B) { return A.i < B.i; }); // for (int i = 0; i < 2*M; i++) printf("A %d %d %d\n", E[i].i, E[i].s, E[i].k); int ret = 0, j = 0; for (int i = 1; i <= N; i++) { while (E[j].i == i && j < 2*M) { K[E[j].k] += E[j].s; j++; } // printf("B %d %d %d\n", K[1], K[2], K[3]); if (K[1] > 0 && K[2] > 0 && K[3] == 0) { ret++; } } printf("%d\n", ret); return 0; } |