#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
#ifdef HOME__
#define PRINT(x) cerr<<x
#else
#define PRINT(x)
#endif
#define REP(x,n) for(int x=0;x<(n);++x)
#define FOREACH(x,n) for(__typeof(n.begin()) x = (n).begin(); x != (n).end(); ++x)
#define MUST1 1
#define MUST2 2
#define CANT 3
#define MAX_M 1000001
int n,m;
int l,r,k;
//std::multimap<int,int> events;
typedef pair<int,int> PII;
PII events[MAX_M*2];
bool compare(const PII& a, const PII& b) {
return a.first < b.first;
}
int must1 = 0, must2 = 0, cant = 0;
int main() {
ios_base::sync_with_stdio(0);
cin>>n>>m;
int doubleM = (m<<1);
REP(x,m) {
cin>>l>>r>>k;
events[x<<1] = (make_pair(l, k));
events[(x<<1)+1] = (make_pair(r+1, -k));
}
std::sort(events, events+doubleM, compare);
int last = 0;
int sum = 0;
REP(x, doubleM) {
const auto& elem = events[x];
switch(elem.second) {
case MUST1: ++must1; break;
case -MUST1: --must1; break;
case MUST2: ++must2; break;
case -MUST2: --must2; break;
case CANT: ++cant; break;
case -CANT: --cant; break;
}
PRINT(elem.first << " " << elem.second << " --> " << must1 << " " << must2 << " " << cant << endl);
if (last != 0 && last != elem.first) {
PRINT("Desired color in range " << last << " " << elem.first-1 << endl);
sum += (elem.first - last); // (elem.first-1) - last + 1
}
if (must1 > 0 && must2 > 0 && cant == 0)
last = elem.first;
else
last = 0;
}
cout << sum;
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #include <iostream> #include <string> #include <map> #include <algorithm> using namespace std; #ifdef HOME__ #define PRINT(x) cerr<<x #else #define PRINT(x) #endif #define REP(x,n) for(int x=0;x<(n);++x) #define FOREACH(x,n) for(__typeof(n.begin()) x = (n).begin(); x != (n).end(); ++x) #define MUST1 1 #define MUST2 2 #define CANT 3 #define MAX_M 1000001 int n,m; int l,r,k; //std::multimap<int,int> events; typedef pair<int,int> PII; PII events[MAX_M*2]; bool compare(const PII& a, const PII& b) { return a.first < b.first; } int must1 = 0, must2 = 0, cant = 0; int main() { ios_base::sync_with_stdio(0); cin>>n>>m; int doubleM = (m<<1); REP(x,m) { cin>>l>>r>>k; events[x<<1] = (make_pair(l, k)); events[(x<<1)+1] = (make_pair(r+1, -k)); } std::sort(events, events+doubleM, compare); int last = 0; int sum = 0; REP(x, doubleM) { const auto& elem = events[x]; switch(elem.second) { case MUST1: ++must1; break; case -MUST1: --must1; break; case MUST2: ++must2; break; case -MUST2: --must2; break; case CANT: ++cant; break; case -CANT: --cant; break; } PRINT(elem.first << " " << elem.second << " --> " << must1 << " " << must2 << " " << cant << endl); if (last != 0 && last != elem.first) { PRINT("Desired color in range " << last << " " << elem.first-1 << endl); sum += (elem.first - last); // (elem.first-1) - last + 1 } if (must1 > 0 && must2 > 0 && cant == 0) last = elem.first; else last = 0; } cout << sum; return 0; } |
English