#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; } |