#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;
pair<int, int> ops[2 * 1024 * 1024];
int main() {
ios_base::sync_with_stdio(0);
int cans_ct, ops_ct;
cin >> cans_ct >> ops_ct;
int begin, end, color;
for (int i = 0; i < ops_ct; ++i) {
cin >> begin >> end >> color;
ops[2 * i] = { begin, color };
ops[2 * i + 1] = { end + 1, -1 * color };
}
sort(ops, ops + 2 * ops_ct);
int result = 0;
int prev = ops[0].first - 1;
int colors[4] = {};
for(int i = 0; i < 2 * ops_ct;){
int pt = ops[i].first;
if(colors[1] > 0 && colors[2] > 0 && colors[3] == 0){
result += pt - prev;
}
prev = pt;
while(i < 2 * ops_ct && pt == ops[i].first){
if(ops[i].second > 0){
++colors[ops[i].second];
} else {
--colors[-1 * ops[i].second];
}
++i;
}
}
cout << result << endl;
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 44 45 46 47 48 49 50 | #include <iostream> #include <vector> #include <cstdio> #include <algorithm> using namespace std; pair<int, int> ops[2 * 1024 * 1024]; int main() { ios_base::sync_with_stdio(0); int cans_ct, ops_ct; cin >> cans_ct >> ops_ct; int begin, end, color; for (int i = 0; i < ops_ct; ++i) { cin >> begin >> end >> color; ops[2 * i] = { begin, color }; ops[2 * i + 1] = { end + 1, -1 * color }; } sort(ops, ops + 2 * ops_ct); int result = 0; int prev = ops[0].first - 1; int colors[4] = {}; for(int i = 0; i < 2 * ops_ct;){ int pt = ops[i].first; if(colors[1] > 0 && colors[2] > 0 && colors[3] == 0){ result += pt - prev; } prev = pt; while(i < 2 * ops_ct && pt == ops[i].first){ if(ops[i].second > 0){ ++colors[ops[i].second]; } else { --colors[-1 * ops[i].second]; } ++i; } } cout << result << endl; return 0; } |
English