// Tadeusz Kielak #include <iostream> #define ZOLTY 1 #define NIEBIESKI 2 #define CZERWONY 3 using namespace std; #define MAX_PUSZEK 1000000 long zolty[ MAX_PUSZEK ]; long niebieski[ MAX_PUSZEK ]; long czerwony[ MAX_PUSZEK ]; void zeruj() { for( long i = 0; i < MAX_PUSZEK; i ++ ) { zolty[ i ] = niebieski[ i ] = czerwony[ i ] = -1; } } int main() { long n, m, k, li, ri, ki, l_zielonych; bool zol,nie,cze; ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); cin >> m >> n; zeruj(); for( k = 0; k < n; k ++ ) { cin >> li >> ri >> ki; li --; ri --; if( ki == ZOLTY ) { if( zolty[ li ] < ri ) zolty[ li ] = ri; } if( ki == NIEBIESKI ) { if( niebieski[ li ] < ri ) niebieski[ li ] = ri; } if( ki == CZERWONY ) { if( czerwony[ li ] < ri ) czerwony[ li ] = ri; } } l_zielonych = 0; zol = nie = cze = false; long r_zol, r_nie, r_cze; r_zol = r_nie = r_cze = -1; for( k = 0; k < m; k ++) { if( zolty[ k ] >= 0) { if( zol ) { if ( zolty[ k ] > r_zol ) r_zol = zolty[ k ]; } else { zol = true; r_zol = zolty[ k ]; } } if( zol && r_zol < k) zol = false; if( niebieski[ k ] >= 0) { if( nie ) { if ( niebieski[ k ] > r_nie ) r_nie = niebieski[ k ]; } else { nie = true; r_nie = niebieski[ k ]; } } if( nie && r_nie < k) nie = false; if( czerwony[ k ] >= 0 ) { if( cze ) { if ( czerwony[ k ] > r_cze ) r_cze = czerwony[ k ]; } else { cze = true; r_cze = czerwony[ k ]; } } if( cze && r_cze < k) cze = false; if( zol && nie && !cze ) l_zielonych ++; } cout << l_zielonych << 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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | // Tadeusz Kielak #include <iostream> #define ZOLTY 1 #define NIEBIESKI 2 #define CZERWONY 3 using namespace std; #define MAX_PUSZEK 1000000 long zolty[ MAX_PUSZEK ]; long niebieski[ MAX_PUSZEK ]; long czerwony[ MAX_PUSZEK ]; void zeruj() { for( long i = 0; i < MAX_PUSZEK; i ++ ) { zolty[ i ] = niebieski[ i ] = czerwony[ i ] = -1; } } int main() { long n, m, k, li, ri, ki, l_zielonych; bool zol,nie,cze; ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); cin >> m >> n; zeruj(); for( k = 0; k < n; k ++ ) { cin >> li >> ri >> ki; li --; ri --; if( ki == ZOLTY ) { if( zolty[ li ] < ri ) zolty[ li ] = ri; } if( ki == NIEBIESKI ) { if( niebieski[ li ] < ri ) niebieski[ li ] = ri; } if( ki == CZERWONY ) { if( czerwony[ li ] < ri ) czerwony[ li ] = ri; } } l_zielonych = 0; zol = nie = cze = false; long r_zol, r_nie, r_cze; r_zol = r_nie = r_cze = -1; for( k = 0; k < m; k ++) { if( zolty[ k ] >= 0) { if( zol ) { if ( zolty[ k ] > r_zol ) r_zol = zolty[ k ]; } else { zol = true; r_zol = zolty[ k ]; } } if( zol && r_zol < k) zol = false; if( niebieski[ k ] >= 0) { if( nie ) { if ( niebieski[ k ] > r_nie ) r_nie = niebieski[ k ]; } else { nie = true; r_nie = niebieski[ k ]; } } if( nie && r_nie < k) nie = false; if( czerwony[ k ] >= 0 ) { if( cze ) { if ( czerwony[ k ] > r_cze ) r_cze = czerwony[ k ]; } else { cze = true; r_cze = czerwony[ k ]; } } if( cze && r_cze < k) cze = false; if( zol && nie && !cze ) l_zielonych ++; } cout << l_zielonych << endl; return 0; } |