#include <iostream> #include <vector> #include <algorithm> using namespace std; int niebieskie[1000002]; int zolte[1000002]; int n, m; int lewy, prawy, kolor; int suma; vector < int > nieb; vector < int > zolt; vector < int > czerw; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for(int i=1; i<=n; i++) { nieb.push_back(i); zolt.push_back(i); czerw.push_back(i); } for(int i=0; i<m; i++) { cin >> lewy >> prawy >> kolor; if(kolor==2) { vector < int > ::iterator it3=lower_bound(nieb.begin(), nieb.end(), lewy); while(it3!=nieb.end()) { if(*it3<=prawy) { niebieskie[*it3]+=1; nieb.erase(it3); } else { break; } //it3++; } } else if(kolor==1) { vector < int > ::iterator it4=lower_bound(zolt.begin(), zolt.end(), lewy); while(it4!=zolt.end()) { if(*it4<=prawy) { zolte[*it4]+=1; zolt.erase(it4); } else { break; } //it4++; } } else { vector < int > ::iterator it5=lower_bound(czerw.begin(), czerw.end(), lewy); while(it5!=czerw.end()) { if(*it5<=prawy) { niebieskie[*it5]-=1000001; zolte[*it5]-=1000001; czerw.erase(it5); } else { break; } //it5++; } } } for(int i=1; i<=n; i++) { //cout << i << " " << niebieskie[i] << " " << zolte[i] << "\n"; if(niebieskie[i]>=1 && zolte[i]>=1) { suma++; } } cout << suma; 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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int niebieskie[1000002]; int zolte[1000002]; int n, m; int lewy, prawy, kolor; int suma; vector < int > nieb; vector < int > zolt; vector < int > czerw; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for(int i=1; i<=n; i++) { nieb.push_back(i); zolt.push_back(i); czerw.push_back(i); } for(int i=0; i<m; i++) { cin >> lewy >> prawy >> kolor; if(kolor==2) { vector < int > ::iterator it3=lower_bound(nieb.begin(), nieb.end(), lewy); while(it3!=nieb.end()) { if(*it3<=prawy) { niebieskie[*it3]+=1; nieb.erase(it3); } else { break; } //it3++; } } else if(kolor==1) { vector < int > ::iterator it4=lower_bound(zolt.begin(), zolt.end(), lewy); while(it4!=zolt.end()) { if(*it4<=prawy) { zolte[*it4]+=1; zolt.erase(it4); } else { break; } //it4++; } } else { vector < int > ::iterator it5=lower_bound(czerw.begin(), czerw.end(), lewy); while(it5!=czerw.end()) { if(*it5<=prawy) { niebieskie[*it5]-=1000001; zolte[*it5]-=1000001; czerw.erase(it5); } else { break; } //it5++; } } } for(int i=1; i<=n; i++) { //cout << i << " " << niebieskie[i] << " " << zolte[i] << "\n"; if(niebieskie[i]>=1 && zolte[i]>=1) { suma++; } } cout << suma; return 0; } |