#include <iostream>
#include <algorithm>
using namespace std;
struct Plot{
int L;
int R;
int K;
};
bool cmp(Plot a, Plot b)
{
if(a.L!=b.L) return a.L < b.L;
if(a.R!=b.R) return a.R < b.R;
return a.K < b.K;
}
Plot P[1000001];
int t[1000001];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n,m;
cin>>n>>m;
for(int i = 0; i < m; i++) {
cin>>P[i].L>>P[i].R>>P[i].K;
}
sort(P,P+m,cmp);
int wynik = 0;
// lecimy bez niebieskiego <
int lewy = 0;
for( int i = 0; i <m; i++) {
if(P[i].K == 3) {//czerwony
lewy = max(lewy, P[i].L);
for(int j = lewy; j<=P[i].R;j++) {
t[j]=10;
}
lewy = max(lewy, P[i].R);
}
}
lewy = 0;
for( int i = 0; i <m; i++) {
if(P[i].K == 1) {//zolty
lewy = max(lewy, P[i].L);
for(int j = lewy; j<=P[i].R;j++) {
t[j]=max(t[j],1);
}
lewy = max(lewy, P[i].R);
}
}
lewy = 0;
for( int i = 0; i <m; i++) {
if(P[i].K == 2) {//niebieski
lewy = max(lewy, P[i].L);
for(int j = lewy; j<=P[i].R;j++) {
if(t[j]==1 || t[j]==2)t[j]=2;
else t[j] = 10;
}
lewy = max(lewy, P[i].R);
}
}
for(int i = 1; i<=n;i++){
if(t[i]==2)wynik++;
}
cout<<wynik<<"\n";
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 69 70 71 | #include <iostream> #include <algorithm> using namespace std; struct Plot{ int L; int R; int K; }; bool cmp(Plot a, Plot b) { if(a.L!=b.L) return a.L < b.L; if(a.R!=b.R) return a.R < b.R; return a.K < b.K; } Plot P[1000001]; int t[1000001]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n,m; cin>>n>>m; for(int i = 0; i < m; i++) { cin>>P[i].L>>P[i].R>>P[i].K; } sort(P,P+m,cmp); int wynik = 0; // lecimy bez niebieskiego < int lewy = 0; for( int i = 0; i <m; i++) { if(P[i].K == 3) {//czerwony lewy = max(lewy, P[i].L); for(int j = lewy; j<=P[i].R;j++) { t[j]=10; } lewy = max(lewy, P[i].R); } } lewy = 0; for( int i = 0; i <m; i++) { if(P[i].K == 1) {//zolty lewy = max(lewy, P[i].L); for(int j = lewy; j<=P[i].R;j++) { t[j]=max(t[j],1); } lewy = max(lewy, P[i].R); } } lewy = 0; for( int i = 0; i <m; i++) { if(P[i].K == 2) {//niebieski lewy = max(lewy, P[i].L); for(int j = lewy; j<=P[i].R;j++) { if(t[j]==1 || t[j]==2)t[j]=2; else t[j] = 10; } lewy = max(lewy, P[i].R); } } for(int i = 1; i<=n;i++){ if(t[i]==2)wynik++; } cout<<wynik<<"\n"; return 0; } |
English