#include <algorithm> #include <cstdio> #include <utility> #include <vector> using namespace std; typedef pair<int, int> pi; vector<pi> v; int X[4]; int sum = 0; void update(int diff) { // printf("UPDATE: (%d) %d %d %d\n", diff, X[1], X[2], X[3]); if (X[1] > 0 && X[2] > 0 && X[3] == 0) { sum += diff; } } int main() { X[1] = X[2] = X[3] = 0; pi tmp; int a, b, c; int n, m; scanf("%d %d", &n, &m); for (int i = 0; i < m; i++) { scanf("%d %d %d", &a, &b, &c); tmp.first = a; tmp.second = c; v.push_back(tmp); tmp.first = b + 1; tmp.second = -c; v.push_back(tmp); } sort(v.begin(), v.end()); int last = 1; for (int i = 0; i < v.size(); i++) { int pos = v[i].first; int col = v[i].second; if (pos > last) { update(pos - last); } // printf("POS: %d, COL: %d\n", pos, col); if (col > 0) X[col]++; else X[-col]--; last = pos; } if (last < n + 1) { update(n + 1 - last); } printf("%d\n", sum); }
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 | #include <algorithm> #include <cstdio> #include <utility> #include <vector> using namespace std; typedef pair<int, int> pi; vector<pi> v; int X[4]; int sum = 0; void update(int diff) { // printf("UPDATE: (%d) %d %d %d\n", diff, X[1], X[2], X[3]); if (X[1] > 0 && X[2] > 0 && X[3] == 0) { sum += diff; } } int main() { X[1] = X[2] = X[3] = 0; pi tmp; int a, b, c; int n, m; scanf("%d %d", &n, &m); for (int i = 0; i < m; i++) { scanf("%d %d %d", &a, &b, &c); tmp.first = a; tmp.second = c; v.push_back(tmp); tmp.first = b + 1; tmp.second = -c; v.push_back(tmp); } sort(v.begin(), v.end()); int last = 1; for (int i = 0; i < v.size(); i++) { int pos = v[i].first; int col = v[i].second; if (pos > last) { update(pos - last); } // printf("POS: %d, COL: %d\n", pos, col); if (col > 0) X[col]++; else X[-col]--; last = pos; } if (last < n + 1) { update(n + 1 - last); } printf("%d\n", sum); } |